OpenSSH 完全指南
一:概述二:sshd三:ssh1. 远程连接2. 远程执行3. 文件解读
四:sshpass五:sftp六:总结
一:概述
OpenSSH是一套基于 SSH(Secure Shell)协议 的开源工具,用于安全地远程管理计算机和传输数据。它通过加密通信防止窃听、连接劫持等攻击,是 Linux/Unix 系统和网络管理中不可或缺的核心工具。
核心组件
sshd
SSH 服务端守护进程,监听 22 端口,处理连接请求。配置文件:/etc/ssh/sshd_config。 ssh
SSH 客户端工具,用于连接远程主机。示例:ssh user@host -p 22。 辅助工具
ssh-keygen:生成密钥对(RSA/ECDSA/Ed25519)。ssh-copy-id:自动部署公钥到远程主机。scp/sftp:加密文件传输。
二:sshd
核心配置文件
/etc/ssh/sshd_config
优化配置
vim
[root@nfs01 ~]# vim /etc/ssh/sshd_config
# 连接加速
UseDNS no
GSSAPIAuthentication no
# 安全优化
Port 22
PermitRootLogin yes
sed + cat
# 注释掉 sshd 服务端指定的已有的配置
[root@nfs01 ~]# sed -ri.bak '/^(UseDNS|GSSAPIAuthentication|Port|PermitRootLogin)/s@^@#@g' /etc/ssh/sshd_config
# 重新配置连接优化、端口、是否准许 root 的远程登录
[root@nfs01 ~]# cat >> /etc/ssh/sshd_config << EOF
UseDNS no
GSSAPIAuthentication no
Port 22
PermitRootLogin yes
EOF
参数详解
连接加速描述UseDNS no是否开启反向解析: ip -> 域名或主机名GSSAPIAuthentication noGSS 认证功能关闭安全优化描述Port 22默认是Port 22 端口范围 1-65535 推荐 1w 以上的端口PermitRootLogin yes禁用root用户远程登录权限,默认是yes(可以让root远程登录)(ubuntu 系统中默认是no)使用建议:先添加普通用户配置sudo 权限,然后再禁用。
三:ssh
1. 远程连接
核心:将自身生成的公钥发送给目标机器,这样就可以免密登录目标机器了
创建密钥对
-t 指定加密算法
[root@web01 ~]# ssh-keygen -t rsa
分发公钥
将 id_rsa.pub 发送到目标主机的 ~/.ssh/authorized_keys
-i:指定公钥文件路径
[root@web01 ~]# ssh-copy-id root@web02
免密登录
-p:指定端口(默认22)
-o StrictHostKeyChecking=no:首次连接时,SSH 会将目标主机的公钥保存到 ~/.ssh/known_hosts,以便后续验证。
添加该选项之后虽然跳过了确认,但不会将密钥记录到 known_hosts,因此下次连接仍然不会验证主机身份(相当于每次连接都当作“首次”)
[root@web01 ~]# ssh web02
2. 远程执行
案例一
远程连接到 jack 用户 backup 主机的 22 端口并执行命令,不切换主机
[root@nfs01 ~]# ssh -p 22 jack@backup hostname
hadoop107
案例二
远程连接到 jack 用户 backup 主机的 22 端口并执行多条命令,不切换主机
[root@hadoop108 ssh]# ssh nfs01 hostname && pwd && ll
3. 文件解读
id_rsa:执行完 ssh-keygen -t rsa 生成的私钥id_rsa.pub:执行完 ssh-keygen -t rsa 生成的公钥authorized_keys:执行完 ssh-copy-id root@web02 后,在web02 上的 ~/.ssh 目录下生成,存储允许远程登录到当前服务器的用户公钥known_hosts:当前主机用户的信任远程主机列表
四:sshpass
是一个用于 非交互式SSH密码认证 的命令行工具,允许在脚本或命令行中直接传递密码给SSH/SCP/SFTP,无需手动输入或依赖密钥对
安装
yum install -y sshpass
非交互式登录
密码泄露风险:命令行中的密码可能被ps或history捕获。
sshpass -p '密码' ssh user@host
彻底关闭 yes/no 提示
当第一次用 SSH 连接一台新服务器时,看到这个提示。这其实是 SSH 在说:“我从未见过这个服务器,你确定要信任它吗?”
部分作用sshpass -p '密码'自动填充 SSH 密码(避免交互式输入)ssh-copy-id将本地公钥(默认 ~/.ssh/id_rsa.pub)添加到远程主机的 ~/.ssh/authorized_keys-o StrictHostKeyChecking=no跳过首次连接时的主机密钥确认(自动接受新主机的指纹)
sshpass -p '密码' ssh-copy-id -o StrictHostKeyChecking=no user@host
五:sftp
是一种基于SSH(Secure Shell)的安全文件传输协议,用于在客户端和服务器之间加密传输文件
上传
# 文件
put /local/file /remote
# 文件夹
put -r /local/dir /remote/dir
下载
# 文件
get /remote/file /local
# 文件夹
get -r /remote/dir /local/path
常用命令
作用于本地的话则在命令前加 l
命令示例lsls /tmpcdcd /var/wwwllslls ~/Downloadslcdlcd /home/userexit/byeexit
六:总结
本文系统介绍了 OpenSSH 的核心功能与应用场景,涵盖以下关键内容:
OpenSSH 概述
开源安全的远程管理工具,替代 Telnet/FTP 等明文协议。
核心组件:sshd(服务端)、ssh(客户端)、scp/sftp(文件传输)、ssh-keygen(密钥管理)。
sshd 服务端
配置 /etc/ssh/sshd_config 强化安全性(如禁用密码登录、限制 root 访问)。
日志监控与端口管理(默认 22 端口可自定义)。
ssh 客户端
远程连接:ssh user@host -p 端口,支持密钥/密码认证。
远程执行:ssh user@host “command” 实现批量操作。
配置文件解读:~/.ssh/config 简化连接参数(别名、跳板机配置)。
sshpass 工具
非交互式密码输入(需谨慎使用,存在安全风险)。 sftp 安全文件传输
加密替代 FTP,支持交互式命令和脚本化操作。
核心价值:
🔐 提供端到端加密,保障数据安全。
⚡ 高效管理远程服务器、传输文件、调试服务。
🛠️ 灵活适应自动化运维(Ansible/Jenkins 集成)。
适合读者:运维工程师、开发人员、网络安全从业者。