用密钥进行SSH的安全登陆[SSH+PAM+PuTTY]

本文详细介绍如何通过SSH密钥实现安全登录,包括在Windows环境下使用PuTTY生成密钥,在Linux环境下使用ssh-keygen生成密钥,以及如何在服务器端配置SSH服务仅允许密钥登录等关键步骤。

用密钥进行SSH的安全登录[SSH+PAM+PuTTY]

作者:萧少聪[Scott Siu]
E-Mail:scottsiuzs@gmail.com

以前看过好多关于SSH密钥进行登录的文章,好多都在点残缺不全,我在这整理一下!

系统平台

服务器:SLES 9.3
客户端:Window XP
RHEL 4 AS 4.0


笔记
1、PuTTY生成密钥(Window)
下载PuTTY的组件 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
包括:putty.exe puttygen.exe plink.exe pageant.exe 后两个文件这理暂时用不到
生成KEY:
运行 puttygen.exe 在最下方先择你要的加密算法及位数,如:SSH-2 DSA 2048
点击 "Generate" 生成密钥
"Save public key" 保存公钥如:wsshtest
"Save private key" 保存私钥如:wsshtest.ppk

2、ssh-keygen(Linux)
例如:当前用户是root,我要加一个帐号 sshadmin 让它有登陆到远端服务器的权限
# useradd sshadmin -m
# passwd sshadmin
# mkdir /home/sshadmin/.ssh
# chown sshadmin:users /home/sshadmin/.ssh
# cd /home/sshadmin/.ssh
# ssh-keygen -t dsa 2048 (这里会让你输入密钥的文件名如:lsshtest)
# cp lsshtest id_dsa (cat /etc/ssh/ssh_config看看就明白为什么要cp了)

3、服务器
前提:我现在是 root 帐号,服务器地址192.168.1.100
# useradd sshuser -m (在服务器建立允许 SSH 登录的帐号)
# passwd sshuser
# mkdir /home/sshuser/.ssh
# chown sshuser:users /home/sshuser/.ssh
# vi /home/sshuser/.ssh/authorized_keys
(把刚刚 LINUX 中 ssh-keygen 生成的 lsshtest.pub 的内容写入到这个文件
把刚刚在 PuTTY 中 生成的 wsshtest 的内容也写入到这里,最后文件类似于:
ssh-dsa XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXX xxx@localhost
ssh-dsa XXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXX dsa-key-20061115
要注意的是:PuTTY生成的文件在LINUX中可能会出现分行而不是单行的文本,请把它串成一行!
authorized_keys中一行代表一个KEY)

下面是对SSH服务的设置
# vi /etc/ssh/sshd_config
PermitRootLogin no (不允许root登录)
AllowUsers sshuser user1 user2 (只允许user1 user1登录)
PasswordAuthentication no (对于是否能用密码登录的设定)
KerberosAuthentication no (同上)
UsePAM no
(我发现SSH安装时的设定就已经是只支持密钥登录的,只是PAM又允许了密码的使用
这里有两个方法可以把它设为只支持使用密钥,一个是上面的UsePAM设为no不使用PAM,
第二种是下面的在PAM SSH配置文件中加上一行。)
# vi /etc/pam.d/sshd
auth required pam_securid.so reserve (只允许通过密钥登录)

# /etc/init.d/sshd restart
# chkconfig sshd on


4、防火墙iptables
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT


5、测试

WINDOW:运行PuTTY
Session -> Host Name: 192.168.1.100
Connection -> Data -> Auto-login username: sshuser
Connection -> SSH -> Auth: 选择刚刚生成的 wsshtest.ppk

LINUX: 以sshadmin登陆
# ssh sshuser@192.168.1.100

你可以试试在PuTTY中不用ppk来登陆。。。呵呵。。。通不过验证吧!
你也可以试试sshd_config中UsePAM yes和no的效果,我更推荐用no


以上内容如有遗漏讲与我联系,转载讲注明出处!谢谢!
 
在排查远程通过 SSH 登录时出现闪退问题时,可以从以下几个方面进行详细分析和排查: ### 1. **权限配置问题** SSH 对目录和文件的权限要求非常严格。如果 `/etc/ssh` 目录或其下的密钥文件权限设置不当,可能会导致 SSH 服务无法正常加载密钥,从而引发连接中断。例如,将 `/etc/ssh` 目录权限设置为 `777` 会导致 SSH 服务拒绝连接。建议将 `/etc/ssh` 目录的权限设置为 `400` 或 `755`,并确保密钥文件(如 `/etc/ssh/ssh_host_rsa_key`)的权限为 `600`,所有者为 `root` [^1]。 ### 2. **SSH 配置文件问题** 检查 `/etc/ssh/sshd_config` 文件中的配置是否正确。某些配置项可能导致 SSH 登录失败,例如: - `UsePAM`:如果该选项被设置为 `no`,而系统依赖 PAM(Pluggable Authentication Modules)进行身份验证,则可能导致登录失败。可以尝试将其设置为 `yes`。 - `PasswordAuthentication`:如果该选项被设置为 `no`,则不允许使用密码登录,需确保其设置为 `yes`(如果需要密码登录)。 - `PermitRootLogin`:如果禁止 root 登录且尝试以 root 身份登录,也会导致连接失败。 - `MaxAuthTries`:如果设置的认证尝试次数过少,可能导致登录失败。 修改配置后需重启 SSH 服务: ```bash systemctl restart sshd ``` ### 3. **SSH 密钥格式问题** 如果 SSH 服务无法加载主机密钥,会导致连接中断。日志中可能出现类似以下错误: ``` error: key_load_private: invalid format error: key_load_public: invalid format error: Could not load host key ``` 这表明 `/etc/ssh` 目录下的密钥文件(如 `ssh_host_rsa_key`、`ssh_host_ecdsa_key`、`ssh_host_ed25519_key`)格式不正确或损坏。可以尝试重新生成这些密钥文件: ```bash ssh-keygen -A ``` 此命令会重新生成所有缺失或损坏的主机密钥。 ### 4. **SSH 客户端配置问题** 有时问题可能出在客户端配置上。例如,使用 PuTTY 登录时,如果配置的连接方式或加密算法不兼容服务器端,可能导致连接闪退。可以尝试以下操作: - 更新 PuTTY 或使用其他 SSH 客户端(如 OpenSSH、Xshell)进行测试。 - 检查 PuTTY 的配置,确保使用的协议为 `SSH`,并尝试更改加密算法(如选择 `aes256-cbc`)。 - 禁用 PuTTY 的“试图将所有流量压缩”选项。 ### 5. **系统资源或安全策略限制** 某些系统资源限制或安全策略也可能导致 SSH 登录失败。例如: - **SELinux 或 AppArmor**:如果启用了 SELinux 或 AppArmor,并且其策略限制了 SSH 服务的访问,可能导致连接失败。可以临时禁用 SELinux 进行测试: ```bash setenforce 0 ``` - **防火墙安全组**:确保服务器防火墙(如 `iptables`、`firewalld`)或云平台的安全组规则允许 `22` 端口的入站连接。 - **系统日志分析**:查看 `/var/log/secure` 或 `/var/log/auth.log`,寻找与 SSH 登录相关的错误信息,以进一步定位问题。 ### 6. **系统环境问题** 某些系统环境问题也可能导致 SSH 登录失败。例如: - **磁盘空间不足**:如果 `/var` 分区已满,可能导致 SSH 服务无法正常写入日志文件,从而引发连接问题。 - **系统文件损坏**:如果 `/etc/ssh/sshd_config` 或其他关键文件损坏,可能导致 SSH 服务无法正常启动。可以尝试重新安装 OpenSSH 服务: ```bash yum reinstall openssh-server ``` ### 7. **用户权限问题** 如果特定用户无法登录,可能是用户权限或家目录权限配置不当。例如: - 用户的家目录权限过于宽松,SSH 服务可能拒绝登录。建议将家目录权限设置为 `700`。 - 用户的 `.ssh` 目录或 `authorized_keys` 文件权限设置不当。`.ssh` 目录权限建议为 `700`,`authorized_keys` 文件权限建议为 `600`。 ### 8. **SSH 服务版本兼容性问题** 如果客户端和服务器端使用的 SSH 版本差异较大,可能导致连接失败。可以尝试更新客户端或服务器端的 SSH 版本,以确保兼容性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值