从我的Mac终端,我可以通过ssh登录到我的各种Ubuntu服务器,而无需输入密码。没关系。但是我在 Ubuntu 中所做的工作需要我具有 root 访问权限,因此在登录后我总是立即执行sudo su
这是一个额外的步骤,需要在此时手动输入我的密码。
有什么好方法可以避免额外的步骤,所以我像现在一样使用我的用户名登录,但立即为我执行sudo su
(或任何具有等效结果的东西)?
谢谢。
您尝试做的事情似乎非常不安全; 本质上,您正在向以您身份登录的任何人提供根权限。但是,这是可以做到的。
在你正在 ssh 的 Ubuntu 机器上:
-
授予自己无密码的 sudo 权限。您可以对所有命令执行此操作,也可以更安全一点并定义特定命令。首先,启动 sudo 配置编辑器:
$ sudo visudo
然后定义您希望哪个用户能够在没有密码的情况下运行 su
命令。我假设您的用户名是doug
(基于您的堆栈溢出句柄),并且服务器主机名是ubuntubox
:
doug ubuntubox = (root) NOPASSWD: /bin/su
现在您应该能够在没有密码的情况下执行此命令:
sudo su
为了使该命令在登录后立即发生,请将该命令添加到~/.bash_profile的最顶部。如果没有此类文件,请创建一个:
$ touch ~/.bash_profile $ echo "sudo su -" > ~/.bash_profile
注销您的 ubuntu 服务器,因为bash_profile只有在登录时才能获得源。
登录到您的服务器。一旦你的壳打开,它应该把你苏成一个根壳。
如果 ~/.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