如何通过 ssh 登录 Ubuntu 并自动 sudo su



从我的Mac终端,我可以通过ssh登录到我的各种Ubuntu服务器,而无需输入密码。没关系。但是我在 Ubuntu 中所做的工作需要我具有 root 访问权限,因此在登录后我总是立即执行sudo su这是一个额外的步骤,需要在此时手动输入我的密码。

有什么好方法可以避免额外的步骤,所以我像现在一样使用我的用户名登录,但立即为我执行sudo su(或任何具有等效结果的东西)?

谢谢。

您尝试做的事情似乎非常不安全; 本质上,您正在向以您身份登录的任何人提供根权限。但是,这是可以做到的。

在你正在 ssh 的 Ubuntu 机器上:

  1. 授予自己无密码的 sudo 权限。您可以对所有命令执行此操作,也可以更安全一点并定义特定命令。首先,启动 sudo 配置编辑器:

    $ sudo visudo

然后定义您希望哪个用户能够在没有密码的情况下运行 su 命令。我假设您的用户名是doug(基于您的堆栈溢出句柄),并且服务器主机名是ubuntubox

doug ubuntubox = (root) NOPASSWD: /bin/su

现在您应该能够在没有密码的情况下执行此命令:

sudo su
  1. 为了使该命令在登录后立即发生,请将该命令添加到~/.bash_profile的最顶部。如果没有此类文件,请创建一个:

    $ touch ~/.bash_profile $ echo "sudo su -" > ~/.bash_profile

  2. 注销您的 ubuntu 服务器,因为bash_profile只有在登录时才能获得源。

  3. 登录到您的服务器。一旦你的壳打开,它应该把你苏成一个根壳。

如果 ~/.bash_profile 在登录时没有获得来源:

$ echo ". $HOME/.bash_profile" >> ~/.bashrc

建议:如果您这样做,请至少禁用 SSH 的密码登录,并改用密钥。否则,正如其他人已经观察到的那样,您的系统距离完全开放只有一个密码。使用密钥,至少攻击者需要先窃取您的身份密钥。

保护 SSH:在/etc/ssh/sshd_config 中,设置行

PermitRootLogin         no
RSAAuthentication       yes
PubkeyAuthentication    yes
PasswordAuthentication  no

要自动运行 sudo,您可以将命令放在 .loginrc.bashrc文件中(如果您正在运行其他 shell,则可以.profile;除了bash之外,Ubuntu还有dash。请参阅此文章)。

# This is my .bashrc. There are many like it, but this is mine.
# You can also set some variables if you ever need them.
#export LC_ALL=en_US.utf-8
#export SVN_EDITOR=/usr/bin/vim
#export VISUAL=/usr/bin/vim
sudo su

然后 su中删除密码,您需要在每个服务器上运行visudo并添加,例如,

Cmnd_Alias  INSECURE_ROOTSHELL   = /bin/su
ubuntu      ALL=(ALL)   NOPASSWD: INSECURE_ROOTSHELL

最新更新