密钥设置实现免密码访问

进行项目分析等工作,经常要链接服务器,登陆过程中总会需要我们输入密码,如果频率比较低,还好,但是每天的重复输入,总归会浪费我们大量的时间。另一方面部分工具或任务,可能不方便进行交互式的密码输入,因此通过使用密钥来实现免密码展现出较大的优势。

通过公钥与私钥

创建公钥与私钥对

在本地机器上运行

1
ssh-keygen
将公钥复制到远程目录
1
2
3
ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host
# 会提示输入远程服务器的密码
# 密码输入后,会将key写到远程机器的 ~/.ssh/authorized_key.文件中
多公钥的配置

有些特殊情况下,可能我们需要配置多个独立的密钥,比如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
2
sshpass -p passwd ssh(scp) ** 或者 
sshpass -f file ssh(scp) **

其中 -p 直接指定密码,-f 则从文件中读取密码。

-------------本文结束感谢您的阅读-------------