# SSH ### 服务端和客户端 ```bash #服务端安装SSH服务 sudo apt-get install openssh-serve #客户端安装SSH工具 sudo apt-get install openssh-client ``` ### 生成密钥对 ```bash ssh-keygen -t rsa # 指定加密算法为rsa # 生成 id_rsa id_rsa.pub ``` ### 使用公钥通信 ```bash # 方案一 # 复制公钥id_rsa.pub到目标主机 scp id_rsa.pub jilan@172.16.33.106:/home/jilan/ # 追加公钥到.ssh/authorized_keys cat id_rsa.pub >> .ssh/authorized_keys # 方案二 ssh-copy-id jilan@172.16.33.106 ``` ## 问题 发现使用系统自带工具ssh经常断开 ```bash ssh -o ServerAliveInterval=6 -o ServerAliveCountMax=3 root@wangyuedong.com ``` 在Linux系统中,SSH(Secure Shell)是一种网络协议,用于加密远程计算机之间的通信。默认情况下,SSH服务通常使用公钥认证(基于密钥对)来代替传统的密码认证。这意味着用户通常不需要为SSH设置密码,而是通过生成和管理密钥对来访问远程服务器。 然而,如果你确实需要为SSH服务设置密码认证(例如,出于某些特定应用场景或出于兼容性考虑),你可以通过以下步骤来实现: 1. 安装并配置OpenSSH服务器 确保你的系统上安装了OpenSSH服务器。在大多数Linux发行版中,你可以使用包管理器来安装它。例如,在基于Debian的系统(如Ubuntu)上,你可以使用以下命令: ```bash sudo apt-get update sudo apt-get install openssh-server ``` 2. 编辑SSH配置文件 SSH的配置文件通常位于/etc/ssh/sshd_config。你需要编辑这个文件来启用密码认证。 打开配置文件: ```bash sudo nano /etc/ssh/sshd_config #或者使用编辑器 sudo vim /etc/ssh/sshd_config ``` 3. 启用密码认证 在sshd_config文件中,找到以下行并确保它们被正确设置(如果没有,就取消注释或添加它们): ```bash PasswordAuthentication yes ChallengeResponseAuthentication yes ``` 4. 禁用密钥认证(如果需要) 如果你完全想要使用密码认证,也可以禁用密钥认证: ```bash PubkeyAuthentication no ``` 5. 重启SSH服务 修改配置后,需要重启SSH服务以使更改生效: ```bash sudo systemctl restart sshd #Ubuntu22.04可能是ssh sudo systemctl restart ssh ``` 或者如果你使用的是SysVinit系统: ```bash sudo service ssh restart ``` 6. 设置用户密码 为允许使用密码登录的用户设置密码。例如,为username设置密码: ```bash sudo passwd ``` 然后按照提示输入并确认新密码。 注意事项: 安全性:虽然使用密码认证可以提供一定的便利性,但它不如公钥认证安全。建议尽可能使用密钥认证,特别是在生产环境中。如果必须使用密码认证,考虑设置强密码策略或定期更换密码。 配置文件位置:在某些Linux发行版中,如Red Hat系列,配置文件可能位于/etc/ssh/sshd_config。请根据你的系统环境确认配置文件的位置。 防火墙设置:确保你的系统防火墙允许SSH端口(默认是22)的流量。例如,在UFW中,你可以使用以下命令开放SSH端口: ```bash sudo ufw allow ssh ``` 通过以上步骤,你应该能够为SSH服务设置密码认证。然而,考虑到安全性和最佳实践,推荐尽可能使用密钥认证方式。如果你需要同时支持密钥和密码认证,可以保留PubkeyAuthentication为yes,并确保设置了适当的权限和安全措施。