前言

     雨后的清晨比较合适写文章啊,今天记录下SSH 指定端口免密登录的配置过程。

ssh 配置免密登陆

     背景:服务器A 免密登陆到服务器B(IP: 192.168.20.201),以下操作已macOS 终端为例,服务器A称为ssh客户端,被登陆的服务器B称为ssh服务器。

  • 服务器A 生成密钥对

     终端中输入如下命令,所有提示均按回车默认

ssh-keygen -t rsa

     上述操作会在用户的家目录下生成.ssh目录(默认隐藏), 里面有id_rsa (私钥)和id_rsa.pub(公钥)

在这里插入图片描述

  • 服务器A 上传公钥到服务器B
    有三种方式:通过ssh-copy-id ,通过 scp和手动复制,下面介绍前两种;
    (1)ssh-copy-id , 在服务器A 终端下执行
# username 为服务器B的用户名,192.168.20.201为服务器B的IP
ssh-copy-id -i username@192.168.20.201

(2) 通过scp 将 服务器A的公钥(id_rsa.pub) 传输到服务器B的home 目录下, 将公钥追加到服务器B的授权文件authorized_keys文件中,如果没有此目录需自行手动创建,当使用ssh-copy-id 命令时,会自动创建此文件。

#  服务器A 终端下执行
scp ~/.ssh/id_rsa.pub username@192.168.20.201:~/home
# 切换到服务器B 终端,在服务器B执行
cat ~/home/id_rsa.pub >> ~/.ssh/authorized_keys
  • 在服务器A上登录服务器B 测试
ssh username@192.168.20.201

ssh 配置指定端口免密登陆

     SSH 服务程序默认监听端口是 22,所以常说的ssh免密登陆,是会把密钥信息默认传输到22端口下,但是为了系统安全, 常常会更改默认端口,那么这个时候,配置ssh密钥登录该怎么做呢?
传输公钥时指定端口,命令如下:

# port 为指定的端口
ssh-copy-id -i ~/.ssh/id_rsa.pub -p port 'username@ip'

配置后免密登陆不生效

     如上配置后,发现登陆时还是需要密码,怎么回事?去系统授权日志(/var/log/auth.log)中查看详细信息:
提示 “Authentication refused: bad ownership or mode for directory /xxx/xxx”
在这里插入图片描述
    此时需要修改授权文件的权限如下:

# 去掉当前用户组对文件的写权限 
chmod g-w /home/username
# 只有拥有者有读、写、执行权限
chmod 700 /home/username/.ssh
# 只有拥有者有读、写权限,authorized_keys默认是自己唯一写权限的
chmod 600 /home/username/.ssh/authorized_keys

再进行登录,就不再需要密码了(aly 是我设置的服务器别名)
在这里插入图片描述
     还可以通过在ssh命令后面添加调试参数 -vvv查看调试信息
在这里插入图片描述
在这里插入图片描述

免密登陆的原理

在这里插入图片描述

参考链接

http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
https://www.cnblogs.com/hanwen1014/p/9048717.html
https://blog.csdn.net/weixin_30731287/article/details/97608179
https://jingyan.baidu.com/article/454316ab3176d8f7a7c03ab9.html

小结

    本文介绍了ssh的密钥登陆方式及原理,ssh还可以用来做端口转发,后面的博客会继续介绍,欢迎回来哦~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐