SSH免密远程连接Linux服务器

SSH免密远程连接Linux服务器

在本地主机生成RSA密钥对(RSA key pair),将私钥留至本地主机,公钥追加至远程Linux服务器的authorized_keys文件,并完成本地主机和远程服务器的相关配置,指定认证文件即可。(以下为Windows本地主机与Linux远程服务器)。私钥只有本机有,公钥可分发给其他服务器。私钥加密的数据,只有公钥能解密;公钥加密的数据,只有私钥能解密,以此保证安全性。

操作步骤

本地主机生成SSH密钥

C:\Users\808>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\808/.ssh/id_rsa): C:/Users/808/.ssh/id_rsa_808_csg   # 在该路径生成名为id_rsa_808_csg的密钥对,命名时最好注意能够确认主机身份
Enter passphrase (empty for no passphrase):   # 直接回车,否则无法实现免密登录
Enter same passphrase again:   # 直接回车
Your identification has been saved in C:/Users/808/.ssh/id_rsa_808_csg       # 成功生成私钥
Your public key has been saved in C:/Users/808/.ssh/id_rsa_808_csg.pub       # 成功生成公钥

将公钥追加至Linux远程服务器的相应用户的~/.ssh/authorized_keys中

通过远程控制软件将公钥文件(.pub)传输至服务器~/.ssh/路径下,再通过cat命令追加内容:

a808@a808beta:~/.ssh$cat id_rsa_808_csg.pub >> authorized_keys # 追加内容

cat  authorized_keys #查看authorized_keys文件内容,确认是否追加

### 注:如在服务器/home/user/目录下不存在.ssh目录、.ssh/authorized_keys文件,直接创建
a808@a808beta:~$mkdir .ssh      # 创建/home/user/.ssh目录
a808@a808beta:~$cd .ssh
a808@a808beta:~/.ssh$touch authorized_keys      # 创建/home/user/.ssh/authorized_keys目录
由于SSH服务对安全性有一定保证,文件权限不能太高或太低,太低谁都能访问不安全,太高访问权限也有问题,SSH免密登录都不能生效。
sudo chmod 755 .ssh
sudo chmod 644 authorized_keys

客户端配置ssh-agent

# Window主机终端配置,令ssh连接时验证你创建的私钥文件
ssh-agent
ssh-add <私钥文件路径>
ssh -L  # 查看
ssh -l  # 查看

大功告成!至此可以SSH免密登录。但如果是第一次登录还是要输入密码的,以及若以前连接过服务器、服务器的HostKey重新生成过的话,需要删除主机C:/Users/user/.ssh/know_hosts文件中的对应服务器IP地址的那项。


客户端的config
远程服务器端/etc/ssh/sshd_config
a808@a808beta:~$sudo vim /etc/ssh/sshd_config

# 此三项配置必须生效,其它的可根据计算机防护等级自定义
HostKey /etc/ssh/ssh_host_rsa_key   # 启用远程Linux服务器的RSA私钥认证
RSAAuthentication yes
PasswordAuthentication yes

a808@a808beta:~/.ssh$systemctl start/restart sshd    # 启动/重启服务器的ssh服务以生效修改内容

配置过程中遇到的一些问题

【Permission denied, please try again】【Couldn’t load HostKey】

此种情况表现为不仅不能免密登录,输入密码也不能登录
可能是服务器的sshd_config没有配置好、没有重启生效等原因,需仔细检查sshd_config是否有配置遗漏、重启等,缺少一个必须配置就不能完成连接。如,SSH日志出现Couldn’t to load HostKey则可能是服务器sshd_config没有配置HostKey项。

【sshd_config等配置文件访问权限过高】

场景重现:服务器有两个管理员用户A和B,由于.ssh一般位于/home/user/下,出于访问权限的考虑,我担心SSH到B时不能访问/etc/ssh/sshd_config等配置文件,无法正常解析SSH配置,将它们的的权限折腾成了777(文件拥有者、组用户和其它用户都能读、写、执行)。结果反而造成不能免密登录。
问题分析:SSH对安全性有一定保证,如果相关配置文件的读写权限门槛太低,就触发了SSH的保护机制,也不能免密登录。
解决:

# /home/user
用户目录权限为 755 或者 700,不能是77x、777,需要保障other用户不能有w权限

# /home/user/.ssh
.ssh目录权限一般为755或者700。
rsa_id.pub 及authorized_keys权限一般为644
rsa_id权限必须为600

【未开启PermitRootLogin】

登录到远程Linux服务器的root用户,需要在服务器的sshd_config中配置此项为yes

【在管理员User1的身份下创建管理员User2的文件/home/User2/】

User1一般无权对User2的文件进行操作,只能借助root权限创建文件。/home/User2/的文件本应是属于User2的,但通过上述操作,所创建文件的owner成了root,在访问时可能会出很大问题。

# 相关命令
ls -a    # 显示全部文件(夹),包括隐藏的
ls -la   # 显示全部文件(夹)的owner及权限
sudo chown new_owner filename   # 更改文件所有者
chmod [-R] 777 filename  # 所有用户都能读、写、执行filename
chmod [-R] u+x filename  # 对user施加执行filename的权限

其它几种应用场合

VS Code连接远程服务器

下载remote development插件,配置config即可。

# C:/Users/user/.ssh/config
Host xx   # 必填,所连接服务器的别名
	HostName xx   # 必填,所连接服务器的IP地址
	User xx       # 必填,所连接服务器的登录用户名
    IdentityFile "C:\Users\808\.ssh\id_rsa_a808_csg"   # 密码登录不必填,免密登录必填。私钥文件。
    
    # 选填,从服务器回传显示图像用
    ForwardX11 yes                 
    ForwardX11Trusted yes
    ForwardAgent yes

多主机与多服务器SSH连接的情况

假定存在服务器以及主机1、主机2:

  • 无论如何连接,需将相应主机的公钥追加到相应服务器、相应用户的authorized_keys上即可**。
  • 如,user1@host1,user2@host1。想要连接上user2,就把公钥追加到user2的authorized_keys上就行。不同用户的authorized_keys独立。

VS code免密远程登录+X11转发

假定存在服务器A以及主机1、主机2,服务器A有两个管理员账户User1和User2。
如果主机1和主机2都连接到了服务器A的User1账户,且主机1开启了x11 forwarding,那么,在User1身份下对终端的所有操作中,所有图片(包括主机2操作产生的)都会回传到主机1上,因此需要创建多用户区分开。
此外,需配置sshd_config,利用覆写以灵活配置登录用户是否需要x11 forward回传:

a808@a808beta:~$sudo vim /etc/ssh/sshd_config

# /etc/ssh/sshd_config
PX11Forwarding no
AllowTcpForwarding no  

# Allow group to use X11
Match Group group_name
    X11Forwarding yes
    AllowTcpForwarding yes   # 必须设置为yes

# Allow user to use X11
Match User user_name
  X11Forwarding yes
  AllowTcpForwarding yes

参考文献

[1]SSH Configuration: ssh_config
[2]ssh_config和sshd_config配置文件区别
[3]配置vscode 远程开发+ 免密登录
[4]利用vscode + sftp插件 实现远程同步代码
[5]VS code 显示远程 Linux 图形界面
[6]Linux系统管理命令
[7]ssh目录权限说明
[8]Linux chomod命令|菜鸟教程
[9]How to restrict the X11 forwarding access on CentOS 6.5 for specific users?

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anonymous_0_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值