进行项目分析等工作,经常要链接服务器,登陆过程中总会需要我们输入密码,如果频率比较低,还好,但是每天的重复输入,总归会浪费我们大量的时间。另一方面部分工具或任务,可能不方便进行交互式的密码输入,因此通过使用密钥来实现免密码展现出较大的优势。
通过公钥与私钥
创建公钥与私钥对
在本地机器上运行
1 | ssh-keygen -f test -C "test key" |
将公钥复制到远程目录
1 | ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host |
多公钥的配置
有些特殊情况下,可能我们需要配置多个独立的密钥,比如gitlab和github的独立公钥,或者集群公钥:
这个时候,我们可以通过编辑 ~/.ssh/config 文件进行适配。
1 | # host 与 hostname 需要相同 |
其中关键字不分大小,但是后面的值是区分大小写的,常用的关键字如下:
- 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 则从文件中读取密码。