ssh

为什么需要 SSH ?

传统的互联网通信使用明文传输数据,内容一旦被截获就会完全暴露,存在很多安全隐患。

SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。
SSH协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。

SSH 如何工作?

密钥登录过程

  • 连接请求:客户端向远程服务器发送连接请求。连接请求中包含用户的身份信息和使用的密钥对。

  • 密钥验证:服务器收到连接请求后,会检查客户端发送的公钥是否与服务器上已授权的密钥匹配。如果匹配,则向客户端发送一个加密的随机挑战。

  • 挑战响应:客户端收到加密挑战后,先使用服务器的公钥解密,得到其中的随机数,再使用私钥对其进行签名,并将签名后的挑战响应发送回服务器。

  • 验证签名:服务器收到用户的挑战响应后,使用之前存储的公钥对响应进行解密,如果解密后的结果与之前发送的随机挑战匹配,则认证成功。

  • 会话建立:一旦认证成功,远程服务器会建立一个安全的SSH会话,允许用户在该会话中执行命令和操作。

制作密钥对

ssh-keygen -t rsa

ssh 密钥登录服务器

1. 在服务器上添加公钥

cat ~/.ssh/id_rsa.pub # 复制密钥
cat "<密钥>" >> ~/.ssh/authorized_keys

注意:authorized_keys 文件权限需设为 644,否则可能无法登录

2. ssh 打开密钥登录功能

编辑 /etc/ssh/sshd_config,添加如下内容

RSAAuthentication yes
PubkeyAuthentication yes

重启 ssh 服务

systemctl restart sshd

ssh-copy-id 脚本

ssh-copy-id 是一个用来复制 SSH 密钥到指定服务器的脚本。

ssh-copy-id -i identity_file user@host

上面命令中,-i 参数用来指定公钥文件,user 是所要登录的账户名,host 是服务器地址。如果省略用户名,默认为当前的本机用户名。执行完该命令,公钥就会拷贝到服务器。

注意,公钥文件可以不指定路径和 .pub 后缀名,ssh-copy-id 会自动在 ~/.ssh 录里面寻找。

ssh 常用命令

1. 从某主机的80端口开启到本地主机2001端口的隧道

ssh -L 2001:localhost:80 user@host

2. 比较远程和本地文件

ssh user@host cat /path/to/remotefile | diff /path/to/localfile –

3. 通过SSH挂载目录/文件系统

sshfs user@host:/path/to/directory /path/to/mountpoint

4. 通过中间主机建立SSH连接

ssh -t reachable_host ssh unreachable_host

5. 通过SSH连接屏幕

ssh -t remote_host screen –r

6. 端口检测(敲门)

knock <host> 3000 4000 5000 && ssh -p <port> user@host && knock <host> 5000 4000 3000

References

[1] Tinywan, Linux系列 | SSH 如何使用密钥登录服务器
[2] Hostinger, What Is SSH: Understanding Encryption, Ports and Connection
[3] Huawei, 什么是SSH?
[4] alifrank, 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令


ssh
http://guoguo.host/blog/p/ee8dcc44.html
作者
Guoguo
发布于
2024年1月18日
许可协议