ssh
使用密码登录
执行以下命令,连接 Linux 云服务器。
ssh <username>@<hostname or IP address>
- username 即为前提条件中获得的默认帐号。
- hostname or IP address 为您的 Linux 实例公网 IP 或自定义域名。
输入已获取的密码,按 Enter,即可完成登录。
使用密钥登录
执行以下命令,赋予私钥文件仅本人可读权限。
chmod 400 <下载的与云服务器关联的私钥的绝对路径>
执行以下命令,进行远程登录。
ssh -i <下载的与云服务器关联的私钥的绝对路径> <username>@<hostname or IP address>
- username 即为前提条件中获得的默认帐号。
- hostname or IP address 为您的 Linux 实例公网 IP 或自定义域名。
例如,执行
ssh -i "id_rsa" ubuntu@123.206.113.227
命令,远程登录 Linux 云服务器。
断开链接
Ctrl + D
或 输入 logout
.
使用ssh私钥登录设置
背景
public key
认证的主要魅力在于认证时承诺不必提供密码就能够同远程系统建立连接。public key
认证的基础在于一对密钥,public key和private key,public key对数据进行加密而且只能用于加密,private key 只能对所匹配的public key加密过的数据进行解密。
我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。
此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。
最后,远程系统的sshd会得出结论我们拥有匹配的private key允许我们登录。
原理
首先在 serverA 上生成一对秘钥(ssh-keygen)
将公钥拷贝到 serverB,重命名 authorized_keys
serverA 向 serverB 发送一个连接请求,信息包括用户名、ip
serverB 接到请求,会从 authorized_keys 中查找,是否有相同的用户名、ip,如果有 serverB 会随机生成一个字符串
然后使用使用公钥进行加密,再发送个 serverA
serverA 接到 serverB 发来的信息后,会使用私钥进行解密,然后将解密后的字符串发送给 serverB
serverB 接到 serverA 发来的信息后,会给先前生成的字符串进行比对,如果一直,则允许免密登录
生成密钥
# 使用ssh-keygen,然后一路回车
ssh-keygen
# 查看密钥
ll ~/.ssh/
生成authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
提示
如果新增服务器,只需要将authorized_keys上传到新服务器就可以使用私钥登录了
测试私钥可用性
ssh localhost
修改sshd-config配置
vi /etc/ssh/sshd_config
# 修改为 no
PasswordAuthentication no # 关闭密码验证登录
重启sshd服务
systemctl restart sshd
修改端口报错问题处理
修改端口后,重启sshd失败,使用以下命令查看具体错误
journalctl -xe
# 结果包含如下信息
error: Bind to port 8321 on 0.0.0.0 failed: Permission denied
以上提示权限不够,是因为SELinux进行权限管控
处理方法:
- 安装semanage命令
yum install policycoreutils-python -y
- 处理命令
# 查看SELinux规则中ssh服务的监听端口,执行命令后可以看到是22
semanage port -l | grep ssh
# 通过 audit2why分析SELinux日志,可以看到相关的拦截记录
# 修改SELinux规则
semanage port -a -t ssh_port_t -p tcp 8321
# 重启sshd,即可
systemctl restart sshd