ssh远程登录那些事

证书登录

密码登录不安全,可以使用证书登录。

服务端

sshd服务的配置文件/etc/ssh/sshd_config中,需要开启证书登录

PubkeyAuthentication yes

如果是root登录(不推荐),还需要保证root的ssh登录打开:

PermitRootLogin yes

另外,还有两个配置,跟登录有关。

一个是PasswordAuthentication,用于开启证书登录以后,是否还允许密码登录;

另外一个是AuthorizedKeysFile,用于配置证书登录的时候,在用户的什么文件里查找对应的证书,一般默认值是:.ssh/authorized_keys

客户端

客户端,即需要用来登录远程服务器的机器。这机器上需要先生成一对密钥:

ssh-keygen 

然后,把生成的.pub文件的内容,放入需要远程登录的SSH服务器的.ssh/authorized_keys文件里。

我们再使用ssh登录的时候,就会自动使用证书登录了。

私钥密码

我们使用ssh-keygen的时候,一般会要求输入密码,这是为了加密我们的私钥。

每次我们登录远程SSH服务端的时候,都需要输入这个密码,才能使用证书进行登录。

密码加密私钥

如果在生成证书的过程中,我们没有设置密码,也可以事后再加,方法是使用ssh-keygen-p参数。

比如,我们登录服务端的证书私钥为.ssh/id_rsa,我们需要给它设置密码,可以:

ssh-keygen -p -f .ssh/id_rsa

之后再登录服务端就必须输入密码了。

移除私钥密码

如果反过来,想把密码保护的私钥文件,去除密码,也同样是这个命令这个参数,方法就是执行

ssh-keygen -p -f [私钥路径]

命令之后,输入原密码,再设置密码直接回车,即置空,密码就被移除了。

临时解锁私钥

有的时候,我们既想私钥文件被密码保护,又想在当前的Session状态下,不用重复输入密码,那怎么办呢?

方法是使用ssh-add

ssh-add命令专门用户管理临时的解密私钥。

仍然以我们的私钥文件为.ssh/id_rsa为例。

我们可以执行:

ssh-add .ssh/id_rsa

之后,再当前登录状态下,再执行远程登录,就都不需要输入密码了。

管理临时私钥

管理临时私钥主要是ssh-add的三个参数:

  • ssh-add -l,显示当前解密的私钥
  • ssh-add -d [私钥名称],释放解密的私钥
  • ssh-add -D,释放所有解密的私钥

不同证书

当我们需要登录的主机,使用的证书不一样的时候,可以在.ssh/config中指定。

如:

host 192.168.56.101
        IdentityFile ~/.ssh/id_rsa1
  
host 192.168.56.102  
       IdentityFile ~/.ssh/id_rsa2

其中,host字段可以使用空格添加多个,也支持通配符。

如:

host *.work.net
        IdentityFile ~/.ssh/id_work
  
host *.home.net 192.168.56.* 
       IdentityFile ~/.ssh/id_rsa2

兼容老版本的openssh

为了在新的系统上(openssh版本很新),可以通过openssh登录到老的系统上去,需要做一些向下兼容。

我们当然可以改变系统的openssh设置,比如在/etc/ssh/ssh_config中添加

# add for ssh-rsa old openssh
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa

但是,也可以在$HOME/.ssh/config中,只针对特定主机添加这种配置:

Host 192.168.58.110
        User root
        Port 22
        HostKeyAlgorithms +ssh-rsa
        PubkeyAcceptedKeyTypes +ssh-rsa

之后,我们再通过ssh连接主机,仍然会返回一个错误:

ssh 192.168.58.110  
ssh_dispatch_run_fatal: Connection to 192.168.58.110 port 22: error in libcrypto

这是因为,虽然我们在openssh程序中已经启用了老的算法的支持了,但是openssh依赖的openssl库,即上面错误里显示的libcrypto,仍然不支持老的算法。

根据这篇文章里说的,我们可以设置一下安全策略。

即执行:

update-crypto-policies --set DEFAULT:SHA1

但是这样仍然改变了全局的配置。

为了安全,还有一个改变更小的方法,就是不执行上面的语句,但是在连接老的openssh之前,设置一个环境变量:

export OPENSSL_ENABLE_SHA1_SIGNATURES=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值