1.关于SSH
SSH(缩写为“Secure Shell”或“Secure Socket Shell”)是一种网络协议,用于通过不安全的网络安全地访问网络服务。它包括实现SSH的一套实用工具,例如:
默认情况下, SSH服务器在标准传输控制协议(TCP) 端口22上监听连接。但也可以自定义其他端口, 但要注意避免端口冲突的问题。
SSH可以安全地管理远程系统和应用程序,例如通过网络登录到另一台计算机、执行命令以及将文件从一台计算机移动到另一台计算机。高级SSH功能是创建安全隧道以远程运行其他应用程序协议。
2.基本SSH命令
以下是整理的SSH命令清单:
命令 |
功能描述 |
连接到远程服务器 |
|
ssh pi@raspberry |
raspberry以用户身份pi通过默认 SSH 端口 22连接到设备 |
ssh pi@raspberry -p 3344 |
raspberry以用户身份pi通过3344端口连接到设备 |
ssh -i /path/file.pem admin@192.168.1.1 |
以root用户身份通过密钥文件/path/file.pemadmin连接192.168.1.1 |
ssh root@192.168.2.2 'ls -l' |
以root用户身份连接192.168.2.2并执行远程命令ls -l |
$ ssh user@192.168.3.3 bash < script.sh |
调用当前工作目录中的脚本script.sh,以user用户身份连接192.168.3.3 |
ssh friend@Best.local "tar cvzf - ~/ffmpeg" > output.tgz |
以friend用户身份登录远程主机Best.local, 并在远程主机上对 ~/ffmpeg 目录进行压缩,并将压缩后的结果传输到本地主机上的 output.tgz 文件 |
ssh-keygen |
生成SSH密钥 |
ssh-keygen -F [ip/hostname] |
从~/.ssh/known_hosts文件(已登录的主机)中搜索某个IP地址或主机名 |
ssh-keygen -R [ip/hostname] |
从~/.ssh/known_hosts文件(已登录的主机)中删除某个IP地址或主机名 |
ssh-keygen -f ~/.ssh/filename |
指定文件名 |
ssh-keygen -y -f private.key > public.pub |
从私钥生成公钥 |
ssh-keygen -c -f ~/.ssh/id_rsa |
更改密钥文件~/.ssh/id_rsa`的注释 |
ssh-keygen -p -f ~/.ssh/id_rsa |
更改私钥~/.ssh/id_rsa`的密码 |
ssh-keygen -t rsa -b 4096 -C "my@email.com" |
生成一个带有注释 "my@email.com" 的RSA 4096位密钥:-t:密钥类型 ( rsa, ed25519, dsa, ecdsa) -b:密钥中的位数 -C:提供新注释 |
在服务器之间安全地复制文件 |
|
scp user@server:/folder/file.ext dest/ |
从远程复制到本地目的地dest/ |
scp dest/file.ext user@server:/folder |
从本地复制到远程 |
scp user1@server1:/file.ext user2@server2:/folder |
在两个不同服务器之间复制 |
scp user@server:/folder/* . |
从服务器文件夹复制到本地计算机上的当前文件夹 |
递归复制整个目录 |
|
scp -r user@server:/folder dest/ |
将整个文件夹复制到本地目的地dest/ |
scp user@server:/folder/* dest/ |
将文件夹中的所有文件复制到本地目标dest/ |
压缩数据的选项 |
|
打印详细信息的选项 |
|
保留传输文件的最后修改时间戳的选项 |
|
连接到远程主机端口 8080 的选项 |
|
批处理模式选项并阻止输入密码串 |
|
在服务器之间安全地传输文件 |
|
保留传输文件的最后修改时间戳的选项 |
|
sftp -P 8080 |
连接到远程主机端口8080 |
上传和下载时递归复制整个目录。SFTP不跟踪树遍历中遇到的符号链接。 |
3.SSH配置和选项
以下命令记录了SSH如何在不同机器上记录登录凭据:
命令 |
功能描述 |
man ssh_config |
打开OpenSSH SSH 客户端配置文件。本手册列出了可以更改的所有OpenSSH参数。 |
cat /etc/ssh/ssh_config | less |
查看OpenSSH 客户端系统范围的配置文件 |
cat /etc/ssh/sshd_config | less |
查看OpenSSH服务器系统范围的配置文件;“d”代表服务器“守护进程” |
cat ~/.ssh/config | less |
查看SSH客户端用户特定的配置文件 |
cat ~/.ssh/id_{type} | less |
查看SSH客户端私钥;type是 中的任何一个rsa, ed25519, dsa, ecdsa |
cat ~/.ssh/id_{type}.pub | less |
查看SSH客户端公钥;type是 中的任何一个rsa, ed25519, dsa, ecdsa |
cat ~/.ssh/known_hosts | less |
查看SSH客户端登录的主机 |
cat ~/.ssh/authorized_keys | less |
查看SSH客户端授权登录密钥 |
保存用于公钥身份验证的私有 SSH 密钥(RSA、DSA、ECDSA、Ed25519) |
|
ssh-agent -E fingerprint_hash |
指定显示密钥指纹时使用的哈希算法。有效fingerprint_hash选项是sha256(默认)和md5 |
ssh-agent -t lifetime |
设置lifetime身份/私钥的最大值,可由 中的相同设置覆盖ssh-add。生命周期示例:• 600= 600 秒(10 分钟) • 23m= 23 分钟 • 1h45= 1 小时 45 分钟 |
将 SSH 密钥添加到ssh-agent |
|
列出缓存的私钥ssh-agent |
|
ssh-add -t lifetime |
设置lifetime身份/私钥的最大值。示例lifetime:• 600= 600 秒(10 分钟) • 23m= 23 分钟 • 1h45= 1 小时 45 分钟 |
列出所有已保存身份的公钥参数 |
|
删除所有缓存的私钥 |
|
ssh-copy-id |
在远程服务器上复制、安装和配置SSH密钥 |
ssh-copy-id user@server |
将SSH密钥复制到 aserver作为user |
ssh-copy-id server1 |
server1使用默认登录名复制到某个别名服务器 |
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server |
将特定密钥复制到服务器上作为一个用户 |
4.远程服务器管理
SSH服务器的操作系统大多是Unix/Linux,因此通过SSH登录服务器后,以下命令与Unix/Linux中的命令基本相同。
命令 |
功能描述 |
更改当前工作目录 |
|
停止正在运行的进程 |
|
列出文件和目录 |
|
创建一个新目录 |
|
移动文件或目录 |
|
使用 Nano 在终端中编辑文件 |
|
列出正在运行的进程 |
|
显示当前工作目录 |
|
查看文件的最后几行(默认为 10 行) |
|
监控系统资源和进程 |
|
创建新文件或更新现有文件的时间戳 |
|
使用 Vim 在终端中编辑文件 |
|
关闭 SSH 会话 |
以下是在Windows10上使用PowerShell通过SSH访问网络计算机上的账户:
5.高级SSH命令
在下表中,列出了一些可以帮助完成网络管理任务的复杂SSH实用程序, 包括: SSH文件系统(SSHFS)、数据压缩和X11转发。
要通过SSH进行X11转发, 需要执行三个步骤:
(1) 要实现X11转发,在配置文件~/.ssh/config配置以下参数:
ForwardAgent yes
ForwardX11 yes
(2) 要允许X11执行, 在配置文件:/etc/ssh/sshd_config中配置以下参数:
(3) 在服务器中安装xauth,设置X11身份验证。
命令 |
功能描述 |
将远程服务器的文件系统挂载到本地目录上。在使用前将此程序安装。安装命令示例: • sudo apt install sshfs # Ubuntu/Debian • sudo yum install fuse-sshfs # CentOS |
|
ssh -C hostname |
压缩SSH流量以提高慢速连接的性能。或者,插入选项Compression yes到SSH配置文件中 |
ssh -o "Compression yes" -v hostname |
另一种压缩SSH流量以提高慢速连接性能的方法。这与插入配置选项Compression yes到SSH配置文件中的方法相同。 |
ssh -X user@server |
通过SSH启用X11转发: 以user用户身份将图形应用程序从远程server转发到本地 |
ssh -o ForwardX11=yes user@server |
通过SSH启用X11转发: 以user用户身份将图形应用程序从远程server转发到本地 |
禁用X11转发 |
|
启用可信X11转发。此选项比ssh -X将SSH 服务器的整个显示转发到客户端的风险更大 |
6.隧道技术
使用下面的SSH命令创建安全隧道:
选项 |
功能描述 |
语法/示例 |
将本地主机的某个端口转发到远程主机, 实现从本地主机到远程主机的连接。本地主机充当服务中继, SSH将流量通过连接转发到远程主机上的指定端口 |
命令语法:# ssh user@ssh_server -L local_port:destination:remote_port 示例: # ssh root@192.168.0.1 -L 2222:10.0.1.5:3333 |
|
实现通过跳转主机连接目标主机。该参数是在连接到目标主机之前,先通过跳板主机建立连接,然后再跳转到目标主机上 |
示例1:# ssh -J proxy_host1 remote_host 示例2:# ssh -J user@proxy_host1 user@remote_host2 示例3(多个堡垒主机跳转): # ssh -J user@proxy_host1:port1,user@proxy_host2:port2 user@remote_host3 |
|
该参数实现反向端口转发, 它允许远程主机将其某个端口转发到本地主机, 实现从远程主机到本地主机的连接。本地主机此时充当服务中继,远程主机将流量通过SSH连接转发到本地主机上的指定端口。其中: -N参数表示不执行远程命令, 对于专用端口转发很有用。-f参数表示在后台运行SSH |
语法: ssh -R [remote:]remote_port:destination:destination_port [user@]ssh_serve 例子: # ssh -R 8080:192.168.3.8:3030 -N -f user@remote.host |
|
在本地主机上创建一个SOCK5代理服务器, 使得通过该代理的流量都经过SSH连接到远程主机。本地主机上的指定端口将作为SOCK5代理端口, 可以配置浏览器或其他应用程序来使用该代理。流量将通过SSH连接到远程主机, 然后由远程主机发出 |
语法: # ssh -D local_port_number user@remote_host 例子: # ssh -D 6677 -q -C -N -f me@192.168.5.5 |
7.总结
上面总结了SSH、SCP、SFTP、SSH配置命令以及各种SSH隧道命令。以下是一些更高效、更安全的使用SSH的一些建议:
(1) 禁用X11和TCP转发, 攻击者可以利用此类弱点访问网络上的其他系统。将sshd_config中的选项调整如下:
(2) 更改sshd_config中的默认配置选项, 将默认端口22改成其它数字。
(3) 使用ssh-keygen创建SSH证书并对客户端进行身份验证。
(4) 利用隧道命令使用堡垒主机。
(5) 限制SSH登录到特定的IP地址,例如通过在sshd_config中使用AllowUsers选项添加用户过滤。
本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载者并注明出处:https://www.jmbhsh.com/baihuokuaixun/33775.html