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 密钥登录分为以下的步骤。
预备步骤,客户端通过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
# 启动
systemctl start sshd.service
# 停止
systemctl stop sshd.service
# 重启
systemctl restart sshd.service
# 查看服务日志
journalctl -u ssh
# 查看系统日志
tail -f /var/log/auth.log
# 查看登录详细
lastlog
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发送一个心跳保持隧道的链接,否则这条连接很容易被重置