使用本地配置在ssh登录后自动切换到root

使用本地配置在ssh登录后自动切换到root

有时我必须登录多个服务器并切换到root。
现在我的 ssh 配置看起来像这样

  Host *
    User xxx
    Port 32200

  Host hostnamexxx
    HostName xxx.xxx.xxx.xxx
    IdentityFile /root/.ssh/id_rsa

我可以更改本地 (ssh) 配置仅登录服务器并使用密码自动切换到 root 吗?
不过,将密码存储在未加密的文件中似乎是一种不太安全的方法。

答案1

您可以在 中以 root 身份登录,而不是在登录后“切换”到 root ssh

您可以将以下行添加到您的配置文件中User root

  Host hostnamexxx
    HostName xxx.xxx.xxx.xxx
    User root
    IdentityFile /root/.ssh/id_rsa

这意味着当您尝试ssh访问 hostnamexxx 时,它将尝试直接以 root 身份登录。这相当于运行以下ssh命令:

$ ssh -i /root/.ssh/id_rsa -l root hostnamexxx

但是,它将无法使用该文件,因为它受到保护并且只能由 root 读取,并且它将在目标主机上/root/.ssh/id_rsa询问的密码。root

$ ssh -i /root/.ssh/id_rsa -l root hostnamexxx
Warning: Identity file /root/.ssh/id_rsa not accessible: Permission denied.
Password:  

输入 的root密码后,您将以 root 身份登录到目的地。

如果您不想提供密码,您可以将root的身份文件从/root/.ssh/id_rsa(当然假设您具有sudo的权限root)复制到您的主文件夹并将所有者更改为您的用户:

$ sudo cp /root/.ssh/id_rsa $HOME/.ssh/root_id_rsa && sudo chown <your username> $HOME/.ssh/root_id_rsa

然后$HOME/.ssh/root_id_rsa用作IdentityFile.

答案2

我发现expect可以从这里处理这个问题和其他来源。

#!/usr/bin/expect

set HOSTNAME [lindex $argv 0]
spawn ssh -t $HOSTNAME su -
# expect "密码:"
log_user 0
send "xxxxx\r"
interact

如果您愿意,可以为此脚本设置一个别名。

alias sshr="/root/expect_ssh.sh"

该脚本与我的 ssh 配置配合良好,但可能需要根据您的命令进行一些更改spawn ssh

不幸的是,我对expect脚本知之甚少,上面的脚本有一些可能需要改进的地方。

  1. expect "密码:"不起作用,我将其更改为Password:, Password:。没用。
  2. 我尝试使用log_user 0抑制发送的输出,当然是隐藏密码。但没有成功。

相关内容