引言
本文主要内容有:
(1)ssh的相关知识
(2)如何利用工具生成isa证书对
(3)如何在服务端导入证书
(4)如何在windows下使用客户端证书连接服务器,有两种方案
(5)在mac下使用证书连接服务器
(6)服务器组ssh免密互访
1 ssh的相关知识
见详情文章
2 如何利用工具生成isa证书对
(1) 在mac电脑上,或在windows的机器上安装了git bash之后
命令生成:ssh-keygen -t rsa -C "your.email@example.com” -b 2048
将内容保存到:pbcopy < ~/.ssh/id_rsa.pub
打开查看:cat ~/.ssh/id_rsa.pub
打开目录,mac下直接在fiddler中找不到此目录:open .ssh
生成命令中rsa后面的内容可选,-C这个参数要注意一点,后续有介绍; 生成证书时,会提示设置passphrase,可以回车跳过,即为空; .pub文件就是公钥文件,自己的私钥文件是id_rsa,多个密钥对的私钥都保存在一个文件中
(2)利用xshell的 tools -> user key manager,可以一键式生成密钥对
3 如何在服务端导入证书
通常的追加a内容到b的命令为:cat a >> b
,追加ssh的方法是在cat id_rsa.pub >> ~/.ssh/authorized_keys
4 连接免密连接服务器
一般情况,使用命令即可证书登录:ssh -i "Tikimo.pem" ubuntu@ec2-52-28-7-231.eu-central-1.compute.amazonaws.com
,
如果提示:It is required that your private key files are NOT accessible by others.
,授权:chmod 600 Tikimo.pem
。
4.1 在Windows下用git bash免密连接服务器
最近提到有MinGW,Git Bash等,后者在安装完之后,就安装了MinGW和Mintty,这里正是使用Mintty完成了目标,具体情况如下:
(1)安装了Git-2.18.0-64-bit.exe,就有了C:\Program Files\Git\git-bash.exe,且已加入了右键菜单。其默认运行目录是个人目录,比如c:/Users/tao,但此工具显示的是MINGW64:/c/Users/tao,
但是这个app貌似是mintty 2.8.5,基本上linux里有的命令都可以直接跑了,下一步就是解决ssh的问题
(2)直接在mintty里就能生成rsa证书了,使用命令如上文介绍。注意:我目前在ubuntu的主机上生成密钥对,再把私钥下载到windows机器(windows的路径是C:\Users\tao.ssh\id_rsa),
因为如果没有指定-C,则默认为系统用户名(远程用户名则为ubuntu)生成在rsa证书的末尾,所以在远程生成,不过-C貌似能解决这个问题,另外,ssh命令中带参跟这个不是一回事
(3)在mintty里进行ssh访问:ssh -i /c/Users/tao/.ssh/id_rsa ubuntu@roadl.com
,scp也能用,也是加-i参数
(4)第3步每次都加-i参数、服务器地址,不太方便,如果是mac/linux机器,则有/etc/ssh/ssh_config的配置文件,刚好在windows的git客户端里也有这个文件C:\Program Files\Git\etc\ssh\ssh_config
,且只读,添加以下项:
Host roadl
HostName roadl.com
User ubuntu
IdentityFile /c/Users/tao/.ssh/id_rsa
这样访问就变得非常容易:ssh roadl
4.2 在Windows下用xshell
不管是xshell还filezilla,在connection -> authentication
登录方式上选public key,指定远程用户名和私钥证书文件即可
4.3 在mac下使用证书连接服务器
打开文件: vi ~/.ssh/config
配置内容如下:
Host alias
HostName xxx.com.cn
User SsitU
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
User必须要配,不然报错:Permission denied (publickey).
这样运行ssh alias
就可以远程登录主机了,同时也可用scp了:scp ssh_mac.tar.gz alias:/home/ubuntu/
,这里并没有指定证书或用户名
还有一种方法,不用配置~/.ssh/config
文件,mac默认带有zsh,将命令写入到配置文件:echo “alias ssh-to-username=’ssh username@hostname’” >> ~/.zshrc
更新配置:source ~/.zshrc
,直接使用:ssh-to-username
此章节参考自这里
4.4 内网多服务器之间的ssh免密互访
背景:只有一个弹性公网IP绑定到一台机器,即跳板机,如果要远程其它机器,必是先ssh到跳板机,再ssh到其它机器,这样有一个需求——跳板机免密ssh。
(1)公私拷贝到目标机器,并加到authorized_keys中,在本地机器,保留私钥文件。
为求简便,多个服务器,可以用同一套公私钥
(2)用私钥访问
ssh -i .ssh/id_rsa_2048_tiaoban root@172.26.71.241
,注意要给600权限,chmod 600 .ssh/id_rsa_2048_tiaoban
(3)免key访问
在~/.ssh/下新增文件config,内容如下:
# 访问所有用这个:Host *
Host 172.26.71.241 172.26.71.239 172.26.71.242
AddKeysToAgent yes
#UseKeychain yes # 这个貌似是苹果系统独用的
IdentityFile ~/.ssh/id_rsa_2048_tiaoban