SSH使用技巧

  1. 配置文件
  2. 用户config
    1. 多个配置文件
    2. 跳板机登录
    3. SCP拷贝文件

  之前使用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