一文学会 SSH 服务( 二 )


SHA256:eHM9jL0Ry+hxt7H3ShEsKlkAxPvnKgN8KejMQ8iot3s root@centos
The key's randomart image is:
+---[RSA 2048]----+
| oo.. |
| . . . |
| . . o o |
| .. o O + . |
|o. o .oS * X + |
|o.o + o..=.o = = |
|.= + o. . + .|
|. * E o . . ..|
| .o= o.. ...|
+----[SHA256]-----+
默认情况下所生成的密钥文件在 ~/.ssh/ 目录下:
 [root@centos ~]# cd ~/.ssh/
[root@centos .ssh]# pwd
/root/.ssh
[root@centos .ssh]# ls
authorized_keys id_rsa id_rsa.pub
其中:

  • id_rsa 是私钥文件;
  • id_rsa.pub 是公钥文件;
  • authorized_keys 可以追加其他设备的公钥内容到该文件中实现密钥方式登录 。比如我一台机器A 希望登录机器B,我把A机器中的id_rsa.pub 内容复制粘贴到B机器的authorized_keys 末行即可 。
在使用时需要主要~/.ssh 的目录必须为700,目录中的三个文件的权限必须为600,否则无法正常使用密钥认证 。
修改服务端配置文件中的如下内容:
 PasswordAuthentication no
重启ssh 服务即可实习禁止密码登录 。
客户端使用密钥登录可以使用如下命令:
 ssh -i 密钥文件 用户名@ IP 地址
 3.SSH 的客户端在 ~/.ssh/config中可以配置客户端的一些连接参数,可以执行:
 man ssh_config
它的配置如下所示
 Host *
PasswordAuthentication no
ChallengeResponseAuthentication no
HashKnownHosts yes
ProxyCommand ssh jump@123.111.104.111 -p 65422 -W %h:%p
Host aliyun
HostName 114.113.199.88
User hedu
IdentityFile ~/.ssh/cloudsupport
Port 1046
其中,config配置含义如下:
  • Host:用来指定该key的Host名字,通配符*表示任意Host 的配置 。
  • Hostname:此处指定Host对应的具体域名或 IP 地址 。
  • Port:说明目标Host 的连接端口 。
  • User root:说明该配置的用户得是root 。
  • IdentityFile ~/.ssh/id_rsa:这行最为关键,指定了该使用哪个ssh key文件,这里的key文件一定指的是私钥文件 。
配置完成之后,比如我们要登录aliyun这个Host,执行如下命令即可 。
 ssh aliyun
 4.SSH 反向隧道我们可以通过 SSH 实现内网穿透,通过 SSH 的方式在一个内网访问另外一个内网,我们把他称为 SSH 反向代理 。
一文学会 SSH 服务

文章插图
步骤如下:
  • 内网主机 10.1.100.12,SSH 端口为22;
  • 外网主机 121.42.110.23,SSH 端口为22开放一个要绑定内网主机的外网端口,例如2222;
我们要通过外网主机B 的2222端口连接到内网主机10.1.100.12 。
首先,在外网主机修改/etc/ssh/sshd_config文件,如果没有添加即可:
 GatewayPorts yes
然后重启SSH 服务 。
在192.168.10.11执行:
 ssh -NfR 2222:localhost:22 userb@121.42.110.23
参数说明:
一文学会 SSH 服务

文章插图
通过ssh的2222端口连接外网主机,就可以代理到内网主机 。
5.SSH 故障排查1.遇到 SSH 连接异常
可以查看提示,如果提示不明显,可以使用 -vvv 参数打印详细的debug 信息:
 ssh -vvv
一般可以在debug 信息中找到连接失败的问题 。
2.遇到 ssh 连接卡很久
这种情况首先确认下 sshd_config 中的2个配置是否是如下这样:
 UseDNS no
GSSAPIAuthentication no
UseDNS 选项打开状态下,当客户端试图登录SSH服务器时,服务器端先根据客户端的IP地址进行DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,验证与其原始IP地址是否一致,这是防止客户端欺骗的一种措施,但一般我们的是动态IP不会有PTR记录,打开这个选项不过是在白白浪费时间而已,不如将其关闭 。
另外一个是GSSAPI 认证会消耗很长时间,其实关闭了也没多大影响,一般 SSH 依次进行的认证方法的是 publickey, gssapi-keyex, gssapi-with-mic, password,这个你可以ssh -v开启 debug 模式在连接日志看到 。一般用户只使用 password 认证方式,但前面 3 个认证过程系统还是会尝试,这就浪费时间了,也就造成 SSH 登录慢 。
关于 GSSAPI 相关的认证,消耗的时间比较多,具体可以查看 SSH 连接日志 。
GSSAPI 主要是基于 Kerberos 的,因此要解决这个问题也就变成要系统配置有 Kerberos,一般用户是没有配置 Kerberos的 。


推荐阅读