SSH 相关命令详解
- ssh
- ssh-keygen
- ssh-copy-id
- ssh-agent 和 ssh-add
- ssh-keyscan
- sshd
ssh
ssh – OpenSSH 远端登陆客户端,默认22端口
描述:
ssh (ssh client)是一个用于登录到远程计算机并在远程计算机上执行命令的程序。它旨在通过不安全的网络在两个不受信任的主机之间提供安全的加密通信。X11连接、任意TCP端口和unix域套接字也可以通过安全通道转发。
ssh连接并登录到指定的目的地,该目的地可以指定为[user@]主机名,也可以指定为ssh://[user@]hostname[:port]形式的URI。用户必须使用以下几种方法之一向远程机器证明他/她的身份(见下文)。
如果指定了一个命令,它将在远程主机上执行,而不是登录shell。
基本使用:
ssh root@121.199.172.217
每次远程连接ssh都需要指定user和ip是一件非常繁琐的事情,可以是通过配置的形式使用默认值:
vim /etc/hosts
121.199.172.217 aliyun
ssh root@aliyun
cd ~/.ssh/
touch config
vim config
Host aliyun
User zsl
此时想要通过ssh连接远程121.199.172.217时,只需要执行:
ssh aliyun
是不是非常方便呢(注意使用ssh需要安装OpenSSH)
ssh-keygen
每次使用ssh远程访问都需要输入密码一定觉得十分麻烦,此时就可以使用 ‘‘ssh-keygen’’ 用于生成公私钥文件,将公钥发送到远端服务器,就可以免密登陆远端服务器。
ssh-keygen -f aliyun
生成之后还需要将aliyun.pub传输到远端服务器上,将aliyun.pub内容追加到~/ssh/authorized_keys文件内容;
注意:~/ssh/authorized_keys文件权限普通用户需要设置为chmod 600,root用户chmod 644。
由于这里使用指定文件名,需要在配置文件中增加aliyun指定文件。
zsl0@zsl0deMacBook-Pro .ssh % cat config
Host aliyun
User zsl
PreferredAuthentications publickey
IdentityFile ~/.ssh/aliyun
如果生成公钥并且发送到远端还是需要输入密码,排查步骤:
第一步:ssh -vvv aliyun 查看详细步骤是否使用生成公钥;
第二步:查看远端~/.ssh/authorized_key是否存在aliyun.pub内容
其他可选option:
- -t 加/解密算法
- -b 秘钥长度,rsa默认秘钥长度的为 2048
- -C 注释,一般是填写用户名
- -f 指定生成的秘钥文件名,如果不提供此参数则使用默认文件名,如rsa私钥默认文件名 ~/.ssh/id_rsa ,公钥默认文件名 ~/.ssh/id_rsa.pub
ssh-copy-id
把本地的ssh公钥文件安装到远程主机对应的账户下,ssh-copy-id命令 可以把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id命令也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限远程主机。
ssh-copy-id -i aliyun.pub zsl@aliyun
注意:本地 ~/.ssh/id_rsa 的权限,chmod 400 ~/.ssh/id_rsa ,该文件包含用于授权的私钥,如果该文件可以被其他用户访问,ssh 会忽略该私钥。
可选项:
- -i 指定文件名,如果不传入 -i 参数,ssh-copy-id 使用默认 ~/.ssh/identity.pub 作为默认公钥。如果多次运行 ssh-copy-id ,该命令不会检查重复,会在远程主机中多次写入 authorized_keys 。
ssh-agent 和 ssh-add
ssh-agent 用来代理ssh密钥,如果没有通过配置的方式,指定对应服务器公钥路径,则每次都需要使用 ssh -i 来指定公钥地址,十分麻烦;这里就可以使用ssh-agent结合ssh-add命令来管理密钥。
zsl0@zsl0deMacBook-Pro ~ % ps -ef | grep ssh-agent
501 2412 1 0 11:27上午 ?? 0:00.03 /usr/bin/ssh-agent -l
501 4597 4577 0 10:41下午 ttys000 0:00.00 grep ssh-agent
ssh-agent $SHEEL
zsl0@zsl0deMacBook-Pro ~ % ps -ef | grep ssh-agent
501 2412 1 0 11:27上午 ?? 0:00.03 /usr/bin/ssh-agent -l
501 4611 4610 0 10:43下午 ?? 0:00.00 ssh-agent /bin/zsh
501 4614 4610 0 10:43下午 ttys000 0:00.00 grep ssh-agent
ssh-agent -k
在测试ssh-agent之前,需要将先前config文件配置的指定公钥地址注释掉:
zsl0@zsl0deMacBook-Pro .ssh % cat config
Host aliyun
User zsl
此时再使用 ssh aliyun,访问就需要输入密码了;
那么开始尝试ssh-agent代理吧!
ssh-agent $SHELL
zsl0@zsl0deMacBook-Pro ~ % ps -ef | grep ssh-agent
501 2412 1 0 11:27上午 ?? 0:00.03 /usr/bin/ssh-agent -l
501 4611 4610 0 10:43下午 ?? 0:00.00 ssh-agent /bin/zsh
501 4614 4610 0 10:43下午 ttys000 0:00.00 grep ssh-agent
ssh-add ~/.ssh/aliyun
ssh aliyun
ssh-add其他参数:
zsl0@zsl0deMacBook-Pro .ssh % ssh-add -l
3072 SHA256:YUyjunktfEdZ45Esh+fG07rlEV0OqKHWWrhOOY1GQw0 zsl0@zsl0deMacBook-Pro.local (RSA)
zsl0@zsl0deMacBook-Pro .ssh % ssh-add -d ~/.ssh/aliyun
Identity removed: /Users/zsl0/.ssh/aliyun RSA (zsl0@zsl0deMacBook-Pro.local)
zsl0@zsl0deMacBook-Pro .ssh % ssh-add -l
The agent has no identities.
是不是非常方便,当有多个密钥时,对应不同远端地址,可以使用config配置文件的方式指定文件或者使用ssh-agent来代理管理多个密钥,不需要再操心哪个密钥对应哪个远端服务器。
ssh-keyscan
ssh-keyscan 用来收集公钥的主机地址
zsl0@zsl0deMacBook-Pro .ssh % ssh-keyscan aliyun
aliyun ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDB6pxxxxxxxxxxxxxx7GPZfK5U31/Im7bAYnxYtqndXSE9Tw8X73RJtc/u8cQhWKjuszPNMDTZS1kinKhbJDbWnLMXzd+rBfp++gZHXbfhIseVYmIpjiwmw0NmCZtARhVcPu1vPoSkxVPjXA0FPnGCQmwdpxcdo8R6j/oYE7yRWEXA3vbd2fxxxxxxxxxxxx33yBU27Eeev+u68zq6MEqvjQfGvxiRE8D7fAfIlw9ugmHCyebOjZbIW9mHwbti6UjVt/W/PdFiC7fDDKyJvgkDOTokA4RqdPRnqlX/phltA2dr2Vbxxxxxxxxxx
aliyun ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIxxxxxxxxxBIpksTXSC3PDMccEmRjRZjhq72g0WwigP4IX+b430EeCxxxxxxxxx6JtEl/HE17rb8afZd4QHt0nppKoas=
aliyun ssh-ed25519 AAAAC3NzaxxxxxxxE5AAAAIIlxxxxxxxxxxJrMUEs+e9r3pQJ4571uHmVRFAko1
其他可选项:
- -4:强制使用IPv4地址;
- -6:强制使用IPv6地址;
- -f:从指定文件中读取“地址列表/名字列表”;
- -p:指定连接远程主机的端口;
- -T:指定连接尝试的超时时间;
- -t:指定要创建的密钥类型;
- -v:信息模式,打印调试信息。
sshd
sshd是 OpenSSH守护进程
openssh套件在不安全的网络中为两台为信任的主机之间建立加密的数据通信,是rlogin、rsh等明文传输数据的通信工具的替代品。sshd指令是openssh套件中的核心程序,其他的指令(如,sftp-server、slogin、scp)等都是基于sshd命令的。
[zsl@iZbp10sz66ubwocy0uxhauZ ~]$ systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2021-11-05 19:04:37 CST; 9 months 8 days ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1126 (sshd)
CGroup: /system.slice/sshd.service
└─1126 /usr/sbin/sshd -D
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
常用参数:
-4 | 强制使用IPv4地址 |
---|
-6 | 强制使用IPv6地址 |
-D | 以非后台守护进程的方式运行服务器 |
-d | 调试模式 |
-e | 将错误发送到标准错误设备,而不是将其发送到系统日志 |
-f<配置文件> | 指定服务器的配置文件 |
-g<登录过期时间> | 指定客户端登录的过期时间(默认时间为120秒),如果在此期限内,用户没有正确认证,则服务器断开此客户端的连接 |
-h<主机key文件> | 指定读取主机key文件 |
-i | sshd以inetd方式运行 |
-o<选项> | 指定sshd的配置选项 |
-p<端口> | 指定使用的端口号 |
-q | 静默模式,没有任何信息写入系统日志 |
-t | 测试模式 |
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)