进行项目分析等工作,经常要链接服务器,登陆过程中总会需要我们输入密码,如果频率比较低,还好,但是每天的重复输入,总归会浪费我们大量的时间。另一方面部分工具或任务,可能不方便进行交互式的密码输入,因此通过使用密钥来实现免密码展现出较大的优势。
通过公钥与私钥
创建公钥与私钥对
在本地机器上运行
1 | ssh-keygen |
将公钥复制到远程目录
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host |
多公钥的配置
有些特殊情况下,可能我们需要配置多个独立的密钥,比如gitlab和github的独立公钥,或者集群公钥:
这个时候,我们可以通过编辑 ~/.ssh/config 文件进行适配。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28# host 与 hostname 需要相同
# configuration 1
Host cluster
# 你的主机名
HostName 10.1**.**.**
# 你的用户名
User liu******
# 你的rsa秘钥文件
IdentityFile ~/.ssh/id_rsa
# configuration 2
Host github.com
HostName github.com
# 你的github账号
User 6****@qq.com
# github对应的rsa秘钥文件
IdentityFile ~/.ssh/id_rsa_github
# configuration 3
# gitlab
# host 与 hostname 需要相同
Host gitlab.******.cn
HostName gitlab.******.cn
# 你的gitlab账号
User liu******@********ics.cn
# gitlab对应的rsa秘钥文件
IdentityFile ~/.ssh/id_rsa_gitlab
其中关键字不分大小,但是后面的值是区分大小写的,常用的关键字如下:
- Host:类似昵称,用于标识某个特定的配置,在ssh命令中使用,例如我们想要ssh连接到上例中的#1配置的主机,则在命令行执行如下命令即可:
ssh cluster
, cluster == liubo4@10.192.36.4 - HostName: ssh链接的主机名,一般是IP地址或域名。
- User: ssh链接的用户名
- IdentityFile: 认证证书文件,默认位置是~/.ssh/id_rsa, ~/ssh/id_dsa等,如果采用默认的证书,可以不用设置此参数,除非你的证书放在某个自定义的目录,那么你就需要设置该参数来指向你的证书
- Port: SSH访问主机的端口号,默认是22端口,同上,只有在非默认情况下才需要设置该值
更多关键字可以通过执行 man ssh_config
查看。
配置完成进行测试
1 | ssh remote-host |
不需要输入密码即可登录到远程服务器
sshpass 工具
先在机器A上安装 sshpass 工具,然后使用
1 | sshpass -p passwd ssh(scp) ** 或者 |
其中 -p 直接指定密码,-f 则从文件中读取密码。