ssh

原创
2024/12/24 21:48
阅读数 30

1 概述

SSH (Secure Shell) 是一种用于远程登录和其他网络服务之间的加密协议,SSH 提供了一个安全的通信渠道,以保护数据的机密性和完整性。而 ssh 命令则通过 SSH 协议连接到远程主机,实现远程登录和执行命令,它加密会话中的所有通信,确保数据传输的安全性。

2 语法

ssh [options] [user@]hostname [command]

参数

  • [user@]hostname:要连接的远程主机的用户名和主机名。
    • 如果不指定用户名,系统会默认使用当前的本地登录用户作为远程登录用户。这种方式适用于某些特定场景,例如在本地和远程主机之间进行文件传输时,可以简化命令格式‌;
    • hostname可以是具体的域名,再解析成具体IP,也可以直接指定IP;
  • [command]:可选的在远程主机上执行的命令;

选项

  • -l user:指定要登录的用户。
  • -p port:指定连接到远程主机的端口号,默认是22。
  • -i identity_file:指定身份验证文件(私钥文件)。
  • -v:详细模式,可以显示调试信息。
  • -C:启用压缩。
  • -N:不执行远程命令,只进行端口转发。
  • -f:后台运行。
  • -L local_port:remote_host:remote_port:本地端口转发。
  • -R remote_port:local_host:local_port:远程端口转发。
  • -D [bind_address:]port:动态应用程序级端口转发。

3 示例

# 指定端口连接:
ssh -p 2222 user@hostname

# 使用身份验证文件:
ssh -i /path/to/private_key user@hostname

# 在远程主机上执行命令:
ssh user@hostname ls -al

# 后台运行且不执行命令:
ssh -f -N user@hostname

4 端口转发

ssh服务需要 ssh客户端 和 sshd服务端共同实现。既然涉及到两个机器,就需要和IP、Port打交道。

4.1 本地端口转发

本地转发一般是在跳转机/跳板机/堡垒机的场景。即 本地机器不能直接访问目标机器,需将 sshd 服务机作为跳转机,使得本地机器可以通过跳转机,访问到目标机器。

在本地机器执行:

ssh -L local_port:target_ip:target_port jump_user@jump_ip

其中:

  • local_port:本地端口,默认为22;
  • target_ip:目标机器IP,是相对于jump_ip而言,如果就是jump_ip本身,则target_ip值可以填成localhost或127.0.0.1;
  • target_port:目标机器端口;
  • jump_user:从本地机器登录到跳板机时的用户名;
  • jump_ip:跳板机IP;

注意:从跳板机登录到目标机器时,未注明登录用户,说明它的登录用户就是本地机器登录跳板机所使用的账号。

4.2 远端端口转发

如果本地机器不能ssh访问跳板机,但是跳板机可以ssh访问本地机器,那么就可以在跳板机上进行远端端口转发,让本地机器可以访问到目标机器。

在跳板机上执行:

ssh -R local_port:target_ip:target_port local_user@local_ip

5 长保持配置

在ssh登录到目标机器后,如果没有操作,到了固定时间就会断开:

SSH Client_loop: send disconnect: Broken pipe Error

可以通过以下配置,让ssh连接进行长期保持:

5.1 服务端sshd配置

在 /etc/ssh/sshd_config 文件中,找到以下两个配置项,并设为对应的值:

# 指定服务端向客户端请求心跳消息的时间间隔, 单位为秒。默认是0, 表示不发送
ClientAliveInterval: 60
# 服务器发出请求后,客户端没有响应的次数最大值。达到此值后, 服务端就自动断开与客户端的连接。正常情况下, 客户端不会不响应,使用默认值3即可。
ClientAliveCountMax: 3

修改后,重启 sshd 服务,让配置生效。

systemctl restart sshd
或
service sshd restart

5.2 客户端ssh配置

SSH Client 读取参数优先顺序:命令行 > 用户配置文件 > 系统配置文件

5.2.1 命令行

ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 user_name@remote_ip

5.2.2 用户配置文件 ~/.ssh/config

Host *
  ServerAliveInterval 60
  ServerAliveCountMax 3
chmod 600 ~/.ssh/config

5.2.3 系统配置文件 /etc/ssh/sshd_config

Host *
  ServerAliveInterval 60
  ServerAliveCountMax 3

6 其他问题

6.1 密钥类型不匹配

Unable to negotiate with 1.2.3.4 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

本地和远程进行密钥比对时发现不匹配,对方支持的是ssh-rsa,ssh-dss。那就在本地文件中配置一下,我这里是在 ./ssh/config文件中:

Host *
  HostKeyAlgorithms +ssh-rsa,ssh-dss
  PubkeyAcceptedKeyTypes +ssh-rsa,ssh-dss

保存退出,重新连接即可。如果是其他的,把相应的值加在后面即可,多个用英文逗号分隔。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部