ssh服务
ssh
(Secure Shell)命令用于安全地远程登录到另一台计算机,并执行命令和传输文件。ssh
提供了加密的通信通道,确保数据传输的安全性。
ssh [选项] [用户@]主机 [命令]
常用选项
- -V:显示
ssh
版本信息。 - -v:增加调试信息的详细程度,最多可以使用三次(-v -v -v)。
- -i:指定用于身份验证的私钥文件。
- -p:指定远程主机的 SSH 服务端口(默认为 22)。
- -l:指定登录用户名。
- -X 或 -Y:启用 X11 转发,用于图形界面应用程序。
- -N:不执行远程命令,仅建立连接(常用于端口转发)。
- -f:在后台运行
ssh
。 - -C:启用压缩。
- -o:指定配置选项。
- -L:本地端口转发。
- -R:远程端口转发。
- -D:动态端口转发(SOCKS 代理)。
一、启动服务
sudo systemctl start ssh 命令用于启动 SSH 服务,使得其他设备可以通过SSH协议连接到这台主机
systemctl status ssh 检测是否开启ssh服务
二、连接主机
ssh root@localhost
1. 基本用法
ssh user@hostname
- user:远程主机的用户名。
- hostname:远程主机的地址(可以是 IP 地址或主机名)。
2. 指定端口
ssh -p 2222 user@hostname
- -p 2222:指定远程主机的 SSH 服务端口为 2222。
3. 使用私钥文件
ssh -i /path/to/private_key user@hostname
4. 多跳连接
ssh -t user1@host1 ssh user2@host2
- -t:强制分配一个伪终端,用于多跳连接。
5. 代理命令
ssh -o ProxyCommand="nc %h %p" user@hostname
- -o ProxyCommand=“nc %h %p”:使用
nc
(Netcat)作为代理命令。 - -i /path/to/private_key:指定用于身份验证的私钥文件。
三、配置文件
/etc/ssh/sshd_config
/etc/ssh/sshd_config
是 SSH 服务器(sshd
)的配置文件,用于控制 SSH 服务的行为。这个文件包含了许多配置选项,可以通过编辑这些选项来调整 SSH 服务的各种行为。
Port
- 描述:指定 SSH 服务监听的端口号。
- 默认值:22
- 示例:
Port 2222
ListenAddress
- 描述:指定 SSH 服务监听的 IP 地址。可以指定多个地址,每行一个。
- 默认值:监听所有可用的 IP 地址
- 示例:
ListenAddress 0.0.0.0
ListenAddress ::1
HostKey
- 描述:指定 SSH 服务使用的主机密钥文件。
- 默认值:通常包括
ssh_host_rsa_key
、ssh_host_dsa_key
、ssh_host_ecdsa_key
和ssh_host_ed25519_key
- 示例:
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
4. PermitRootLogin
- 描述:控制是否允许 root 用户通过 SSH 登录。
- 默认值:
prohibit-password
- 可选值:
yes
:允许 root 登录no
:禁止 root 登录without-password
:允许 root 使用公钥认证登录,但不允许密码登录prohibit-password
:允许 root 使用公钥认证登录,但不允许密码登录
- 示例:
PermitRootLogin no
PasswordAuthentication
- 描述:控制是否允许使用密码进行身份验证。
- 默认值:
yes
- 可选值:
yes
:允许密码认证no
:禁止密码认证
- 示例:
PasswordAuthentication no
ChallengeResponseAuthentication
- 描述:控制是否允许使用挑战-响应认证机制。
- 默认值:
yes
- 可选值:
yes
:允许挑战-响应认证no
:禁止挑战-响应认证
- 示例:
ChallengeResponseAuthentication no
PubkeyAuthentication
- 描述:控制是否允许使用公钥进行身份验证。
- 默认值:
yes
- 可选值:
yes
:允许公钥认证no
:禁止公钥认证
- 示例:
PubkeyAuthentication yes
AuthorizedKeysFile
- 描述:指定公钥文件的位置。
- 默认值:
%h/.ssh/authorized_keys
- 示例:
AuthorizedKeysFile .ssh/authorized_keys
四、客户端配置
hash knownHosts yes
在 SSH 客户端配置文件中,HashKnownHosts
选项用于控制是否对 known_hosts
文件中的主机名和 IP 地址进行哈希处理。哈希处理可以增强安全性,因为即使 known_hosts
文件被泄露,攻击者也无法直接从中获取实际的主机名或 IP 地址。
客户端配置文件
SSH 客户端的配置文件通常位于 ~/.ssh/config
,每个用户可以有自己的配置文件。系统范围的配置文件位于 /etc/ssh/ssh_config
。
配置 HashKnownHosts
要启用 HashKnownHosts
选项,你需要在 ~/.ssh/config
文件中添加或修改相应的配置。
示例配置
- 打开配置文件:
nano ~/.ssh/config
- 添加或修改
HashKnownHosts
选项:# ~/.ssh/config Host * HashKnownHosts yes
Host *
:表示此配置适用于所有主机。HashKnownHosts yes
:启用对known_hosts
文件中的主机名和 IP 地址进行哈希处理。
保存并应用配置
- 保存配置文件:编辑完配置文件后,保存并退出编辑器。
- 测试配置:
ssh -o HashKnownHosts=yes user@hostname
你也可以直接使用 -o
选项在命令行中临时启用 HashKnownHosts
。
配置说明
HashKnownHosts yes
:启用哈希处理。HashKnownHosts no
:禁用哈希处理(默认值)。
nano退出命令
- 保存更改并退出:
- 按
Ctrl + O
(写入文件,即保存)。 - 按
Enter
确认保存。 - 按
Ctrl + X
退出nano
。
- 按
- 不保存更改并退出:
- 按
Ctrl + X
。 - 当提示是否保存修改时,按
N
(不保存)。
- 按
远程拷贝,scp
scp
(Secure Copy)命令用于在本地和远程主机之间安全地复制文件。scp
使用 SSH 协议进行加密传输,确保数据的安全性
scp [选项] [源文件] [目标文件]
常用选项
- -P:指定远程主机的 SSH 服务端口(默认为 22)。
- -p:保留文件的修改时间、访问时间和模式。
- -q:静默模式,不显示传输进度。
- -r:递归复制目录。
- -C:启用压缩。
- -i:指定用于身份验证的私钥文件。
- -v:增加调试信息的详细程度。
示例
远程主机 1.1.1.1
上的 /home/kali/.bashrc
文件复制到本地当前目录下的 Copiedbashrc
文件
scp root@1.1.1.1:/home/kali/.bashrc Copiedbashrc
root@1.1.1.1
:指定远程主机的用户名和 IP 地址。root
:远程主机的用户名。1.1.1.1
:远程主机的 IP 地址。
/home/kali/.bashrc
:远程主机上的源文件路径。Copiedbashrc
:本地目标文件名
将本地文件passwd
复制到远程主机的/home/kali
目录下
scp -p passwd root@127.0.0.1:/home/kali/
详细解释
scp
:命令本身,用于安全复制文件。-p
:保留文件的修改时间、访问时间和模式。passwd
:本地文件的路径。root@127.0.0.1:/home/kali/
:远程主机的用户名、IP 地址和目标路径。