ssh基础知识

  • 常用命令
  • 登录流程
  • 配置文件
  • ssh密钥登录
  • 生成密钥
  • 上传公钥
  • 关闭密码登录
  • ssh服务管理
  • 查看日志
  • ssh端口转发



ssh(ssh客户端)是一个用于登录到远程机器并在远程机器上执行命令的程序。


它旨在提供安全的加密通信在不安全的网络上的两个不受信任的主机之间。X11连接、任意TCP端口和UNIX域套接字也可以通过安全通道进行转发。

常用命令

ssh user@hostname

-l:用户名也可以使用ssh的-l参数指定,这样的话,用户名和主机名就不用@写在一起了。

ssh -l username host

-p:指定端口,ssh默认端口是22,如果需要指定其它端口就需要使用-p 端口号

ssh -p 9022 user@hostname

登录流程

如果首次连接一台服务器,会收到下面这段信息,主要显示服务器指纹和MD5,并询问是否继续连接

[root@localhost ~]# ssh -l root 192.168.33.11
The authenticity of host '192.168.33.11 (192.168.33.11)' can't be established.
ECDSA key fingerprint is SHA256:EqwKUqtyrlB8QR82eSreSs+542WqvmGWEE+PSilKKKI.
ECDSA key fingerprint is MD5:19:1b:c1:4c:1d:61:56:e7:ff:5b:15:41:74:02:be:a4.
Are you sure you want to continue connecting (yes/no)? yes

输入yes,就可以将当前连接服务器的指纹储存到本机~/.ssh/known_hosts文件中。以后再连接的时候,就不会再出现警告了。
然后,客户端就会跟服务器建立连接。输入所要登录账户的密码。用户输入并验证密码正确以后,就能登录远程服务器的 Shell了。

# 执行远程命令
 ssh username@hostname command
# 需要互动式的 Shell 环境
 ssh -t username@hostname command

配置文件

SSH 客户端的全局配置文件是/etc/ssh/ssh_config,用户个人的配置文件在~/.ssh/config,优先级高于全局配置文件。
除了配置文件,~/.ssh目录还有一些用户个人的密钥文件和其他文件。下面是其中一些常见的文件。

  • ~/.ssh/id_ecdsa:用户的 ECDSA 私钥。
  • ~/.ssh/id_ecdsa.pub:用户的 ECDSA 公钥。
  • ~/.ssh/id_rsa:用于 SSH 协议版本2 的 RSA 私钥。
  • ~/.ssh/id_rsa.pub:用于SSH 协议版本2 的 RSA 公钥。
  • ~/.ssh/identity:用于 SSH 协议版本1 的 RSA 私钥。
  • ~/.ssh/identity.pub:用于 SSH 协议版本1 的 RSA 公钥。
  • ~/.ssh/known_hosts:包含 SSH 服务器的公钥指纹。

ssh密钥登录

SSH 密钥登录分为以下的步骤。
预备步骤,客户端通过ssh-keygen生成自己的公钥和私钥。
第一步,手动将客户端的公钥放入远程服务器的指定位置。
第二步,客户端向服务器发起 SSH 登录的请求。
第三步,服务器收到用户 SSH 登录的请求,发送一些随机数据给用户,要求用户证明自己的身份。
第四步,客户端收到服务器发来的数据,使用私钥对数据进行签名,然后再发还给服务器。
第五步,服务器收到客户端发来的加密签名后,使用对应的公钥解密,然后跟原始数据比较。如果一致,就允许用户登录。

生成密钥

ssh-keygen

-t参数,指定密钥的加密算法

ssh-keygen -t dsa

-t参数用来指定密钥的加密算法,一般会选择 DSA 算法或 RSA 算法。如果省略该参数,默认使用 RSA 算法。

上传公钥

方法1:

cat ~/.ssh/id_rsa.pub | ssh username@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
chmod 644 ~/.ssh/authorized_keys

方法2:

ssh-copy-id -i key_file username@hostname

关闭密码登录

vi /etc/ssh/sshd_config

对于 OpenSSH,具体方法就是打开服务器 sshd 的配置文件/etc/ssh/sshd_config,将PasswordAuthentication这一项设为no。

PasswordAuthentication yes

ssh服务管理

# 启动
systemctl start sshd.service

# 停止
systemctl stop sshd.service

# 重启
systemctl restart sshd.service

查看日志

# 查看服务日志
journalctl -u ssh
# 查看系统日志
tail -f /var/log/auth.log
# 查看登录详细
lastlog

ssh端口转发

ssh -l proxy -p1022 -qngfNTR 1023:localhost:1022 192.168.10.11 -o ServerAliveInterval=10

参数详解:
-l proxy:指定用户proxy,推荐默认非root用户
-p1022:中转机器A的ssh端口
-qngfNTR:静默模式、后台执行ssh指令、不执行远程指令、不要求分配终端、允许远程主机连接主机的转发端口
1023:localhost:1022:配置转发端口:本机:本机ssh端口,注意本机端口需要在ssh配置文件中添加
192.168.10.11:中转机器A的内网IP
-o ServerAliveInterval=10:是让客户端每10s发送一个心跳保持隧道的链接,否则这条连接很容易被重置