引言

本文主要内容有:
(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