之前使用ssh,都是把各个机器的 ip 记在记事本上,用的时候打开记事本 copy 机器 ip,最近手上的机器越来越多,公司的测试机,自己的服务器,越来越费劲。所以,想把 ssh 常用的一些技巧记录下来,以后用起来更便捷。
配置文件
可以在三个地方更改ssh配置:
1. /etc/ssh/ssh_config 这是系统配置,或者说全局配置,对所有用户都生效
2. ~/.ssh/config 这里的配置只对当前用户生效
3. 命令行参数 在使用ssh命令时,指定参数。只对当前命令有效,如果和配置文件中的有冲突,以命令行指定的参数为准。
用户config
我最开始对 SSH 的了解是,只会基本的 ssh user@ip 的方式登录服务器,最多再配置个免密。实际上,SSH 可以灵活批量配置服务器信息,配置跳板等。
可以在 ~/.ssh/ 路径下创建一个 config 文件,文件内容可以如下:
Host server-1
HostName 127.0.0.1
Port 22
User work
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
ServerAliveInterval 180
上述各配置项含义:
Host 可以给服务器起一个别名,后续连接可以直接使用 “ssh 别名”
HostName 服务器ip,这个就不过多解析了
Port 连接的端口
User 登录到目标机器上的指定用户
PreferredAuthentications 强制使用publickey验证
IdentityFile 密钥文件的路径
ServerAliveInterval 每隔多长时间发送一次心跳,防止长时间没有响应,ssh自动断开连接,单位是秒。
注意: 这个文件是从上向下顺序执行的,当匹配到第一个主机定义时,并不会终止,而是继续往下查找,检查是否有其他匹配的 Host 定义。如果有另一个 Host 定义匹配,SSH 将该 Host 定义下的配置选项跟前面匹配到的主机定义配置选项合并(随着继续往下读取配置,最终配置选项是叠加的)
例如:
Host server-1
HostName 127.0.0.1
Port 22
Host server-2
HostName 128.0.0.1
Port 22
Host server*
User root
在这个例子中,别名为server开头的服务器,通过ssh登录都是root用户。
多个配置文件
如果需要管理非常多的服务器,全写到一个文件里会很乱很难维护,也不方便共享。事实上,~/.ssh/config 中支持引用其它文件。例如可以建一个新的配置文件 ~/.ssh/config-test,然后在 ~/.ssh/config 的开头加入如下一行即可:
Include config-test
事实上这里也可以用通配符,比如:
Include config*
这样 ~/.ssh/ 目录下的所有 config* 开头的文件都会被引用到。
跳板机登录
实际工作中,通常需要跳板机才可登录线上机器,这会产生两个麻烦,一是登录要两次,如果配置 SSH config 还需要在跳板机也配置一份儿;二是拷贝文件十分麻烦,要拷贝两次。
我们可以这样配置:
Host JumpServer
Hostname 1.2.3.4
User work
Host Server*
User work
ProxyJump JumpServer
ServerAliveInterval 180
Host Server-1
Hostname 172.1.0.1
Host Server-2
Hostname 172.2.0.2
上述配置表示所有 Server 开头的服务器,在登录的时候都要从 JumpServer 这个服务器跳转一下。这时候我们想登录 172.1.0.1,只需要直接输入: ssh Server-1
注意一个细节是,这种配置下我们是直接从本地登录内部服务器,所以在配置免密时,是需要把本地的公钥放到内部服务器的。
SCP拷贝文件
如果想在两台服务器之间拷贝文件,事实上是可以在本地执行 scp 的:
scp server1:/path/file server2:/path/
上述命令,需要在server2中已经配置了server1的免密登录,否则是无法直接从server1拷贝文件到server2的。如果没有配置server1和server2的免密,我们可以用本机作为中转,只需要加一个参数 -3
:
scp -3 server1:/path/file server2:/path/
转载请注明来源,欢迎指出错误或表达不够清晰之处。可以在评论区留言,也可以邮件至 hellozhugj@gmail.com