SSH实用技巧
文章目录
ssh和基于ssh的命令(如scp)等是运维人员和服务器打交道的通道,当服务器数量较多,要记住那么多的服务器ip和密码也是非常困难的事情。其实有很多技巧和配置可以让ssh跟ls一样简单。
概念介绍
开始之前让我们先了解一下SSH配置和SSH秘钥对。
SSH配置位置
-
命令行选项
-
用户配置文件 (~/.ssh/config)
-
系统配置文件 (/etc/ssh/ssh_config)
SSH秘钥对
-
ssh-kengen命令
-
-t 指定加密算法(RSA、DSA、ECDSA等)
-
-b 自定生成密钥长度
-
-C 添加密钥对的说明comment
-
-f 指定生成的私钥存储的文件全路径名称
-
-
密码短语(Passphras)
默认不设置密码的话,只要私钥被他人获取(比如电脑遗失,root用户),就可以随意访问授权的服务器,所以为了提高安全性,建议都设置自己的密码短语。 如果没设置,可以给已经生成的秘钥文件增加或修改密码短语:
ssh-keygen -f ~/.ssh/id_ecdsa_liming -p
-
SSH agent
SSH agent 提供了存储私钥的安全方法,同时也能够将已经解密的私钥缓存起来,这样只需要在加入的时候输入一下密码即可。
-
启用agent
ssh-agent bash
-
添加
ssh-add
-
查看
ssh-add -l
-
删除
ssh-add -d
-
配置示例
命令行选型这种原始用法就不多说,我们重点是将一些配置落地,尽可能减少命令行的输入,如下是一个配置示例:
-
客户端生产秘钥对
ssh-keygen -t ecdsa -b 521 -C "$(whoami)@$(hostname)" -f ~/.ssh/id_ecdsa_liming #Enter passphrase (empty for no passphrase): #输入密码 ssh-add ~/.ssh/id_ecdsa_liming
-
客户端增加配置
~/.ssh/configHost liming.pub // (1) HostName ssh.liming.pub // (2) User user // (3) Port 2222 // (4) PreferredAuthentications publickey // (5) IdentityFile ~/.ssh/id_ecdsa_liming // (6)
-
Host: 别名,多个别名以空格分割,可以使用通配符:
* ? !
,如:1.*
-
HostName:: 主机名,如果主机名中包含 ‘%h’ ,则实际使用时会被命令行中的主机名替换,如:
192.168.%h
-
用户
-
端口,默认22
-
强制使用Public Key验证
-
密钥文件的路径,文件名称可以使用如下变量
'%d' 本地用户目录 '%u' 本地用户名称 '%l' 本地主机名 '%h' 远程主机名 '%r' 远程用户名
-
-
服务端配置公钥
mkdir -p ~/.ssh && chmod 700 ~/.ssh echo '~/.ssh/id_ecdsa_liming的内容' >> ~/.ssh/authorized_keys&& chmod 600 ~/.ssh/authorized_keys
-
使用
ssh liming.pub scp liming.pub:~/index.html ./