ssh常用配置

本文最后更新于:September 12, 2020 am

本文主要记录了一些Linux系统下使用ssh指令的技巧和ssh的config文件简化ssh操作的过程。

1、设置权限

一般来说,每个用户都会在对应的家目录下生成一个.ssh文件夹,如tinychen用户则为/home/tinychen/.ssh,而root用户则为/root/.ssh。如果是手动创建的.ssh文件夹,还需要注意权限问题。一般来说.ssh文件夹的权限为700,私钥为600,公钥为644。

1
2
3
4
5
6
[/home/tinychen]# ls -lA | grep ssh
drwx------ 2 tinychen tinychen 4096 Sep 11 15:48 .ssh
[/home/tinychen/.ssh]# ls -l
total 8
-rw------- 1 tinychen tinychen 2610 Sep 11 15:48 id_rsa
-rw-r--r-- 1 tinychen tinychen 575 Sep 11 15:48 id_rsa.pub

2、指定密钥

对于密钥而言,一个用户可能会有多个密钥,如果需要在建立ssh连接的时候需要指定某个密钥可以使用-i参数

1
ssh -i /home/tinychen/.ssh/id_rsa tinychen@192.168.1.1

3、指定端口

如果ssh服务器的端口不是默认的22端口,则在连接的时候需要使用-p参数手动指定端口

1
ssh -p 23333 tinychen@192.168.1.1

4、多路复用

多路复用这个功能并不算是罕见的新功能,对于ssh也可以实现ssh连接的多路复用,即在和一台主机建立ssh连接之后,再次与这台主机建立连接的时候直接复用已有的ssh连接,就不需要再重复进行密码验证等各种操作,这种操作在ssh里面称之为ControlMaster。配置的方法很简单,我们只需要在每个用户对应的~/.ssh/目录下面新建一个config文件,再添加对应的配置:

1
2
3
4
5
6
7
8
Host *
# Host变量主要用于控制哪些主机会使用下面的配置
ControlMaster auto
# ControlMaster变量用于控制是否开启ssh的多路复用功能
ControlPersist 600s
# ControlPersist变量主要用于控制保持连接的时间,这里600s即为600秒(10分钟)
ControlPath ~/.ssh/%r@%h:%p.socket
# ControlPath变量用于存放复用连接所产生的socket文件的路径和命名方式

5、代理转发

ssh中的代理转发功能,名为agent forwarding,主要作用如下:

假设当前有两台服务器A和B,你从自己的电脑远程登录到服务器A,这时候想直接在服务器A上面登录到服务器B,但是服务器A上面没有能够登录到服务器B的key,此时只要开启代理转发功能,将自己电脑的key跟随ssh过程一起发送到服务器A,就可以从服务器A登录到服务器B了。

如何验证自己的配置是否生效呢?我们可以通过ssh-add -L命令来查看当前主机所拥有的key。

1
2
Host *
ForwardAgent yes

6、保持连接

有些ssh服务端为了安全,在一定的时间内没有接收到来自客户端的操作,就会主动断开连接。想要延长这个时间我们可以设置客户端每隔一段时间就向服务器发送数据包来保持连接:

1
2
ServerAliveInterval 60
ServerAliveCountMax 60

同样地,我们也可以在服务器端添加相关的配置,一般都是在/etc/ssh/sshd_config文件中

1
2
ClientAliveInterval 60
ClientAliveCountMax 60

其中ServerAliveIntervalClientAliveInterval表示间隔时间,每隔60s发送一次;ServerAliveCountMaxClientAliveCountMax则表示发送的最大次数,最多发送60次。即在服务器端和客户端之间没有操作的时候重复发送60次,一共60次*60秒共计1小时后断开连接。