bash - Linux - Bash 登录到机器然后成为 root

标签 bash ssh sudo sshpass

我正在尝试使用我的普通用户登录 Linux 机器,然后使用 bash 脚本成为 root。我的用户在 sudoers 文件中,因此它可以成为 root。

正常的过程如下:

$ssh regularuser@machine
regularuser@machine's password:
[regularuser@machine ~]$
[regularuser@machine ~]$ sudo su -
[sudo] password for regularuser:
[root@machine ~]$

我到处搜索以做到这一点,但我能找到的一切都不能完全满足我的需要。我也尝试使用 #!/usr/bin/expect 但它不起作用。
===========================================================================

我的工作 bash (access.sh) 如下 但它在发出“sudo su -”命令后要求我输入密码 :
#!/bin/bash
machine=$1
ssh -t regularuser@$machine "sudo su -"

$ sh access.sh machine
regularuser@machine's password:
[sudo] password for regularuser:
[root@machine ~]# exit
logout
Connection to machine closed.

===========================================================================

尝试 #1 - 当我尝试以下操作时,我得到“/usr/bin/expect: No such file or directory
#!/bin/bash
machine=$1
echo "Password?"
read -s password

expect -c '
    spawn ssh regularuser@'"$machine"'
    expect "Password: "
    send '"$password\r"'
'

尝试 #2 - 结果相同
#!/bin/bash
machine=$1
echo "Password?"
read -s password

/usr/bin/expect << EOF
spawn ssh regularuser@$machine
expect "Password: "
send "${password}\r"
EOF

尝试#3 - 也不起作用。它给了我“ 意外的 EOF,同时寻找匹配的 `''
#!/bin/bash
machine=$1
echo "Password?"
read -s password

ssh -t regularuser@$machine "echo $password | sudo -S su -"


$ sh access.sh machine
Password?
regularuser@machine's password:
bash: -c: line 0: unexpected EOF while looking for matching `''
bash: -c: line 1: syntax error: unexpected end of file
Connection to vm-all-all-ad-test-packages closed.

我也不能做 "sshpass -p "$password"ssh root@$machine"因为我的普通用户的密码与 root 的不同

我尝试了几乎所有的东西,但没有成功。

有任何想法吗?!!

最佳答案

有趣的是你带来了sshpass向上。 sshpass旨在绕过ssh要求以交互方式给出密码。您面临的问题和原因expect不行,那是sudo出于完全相同的原因,使用完全相同的技巧。

潜在的解决方案,按照我推荐的数量递减顺序:

  • 让管理员允许您直接对 root 进行基于 key 的身份验证。
  • 更改 sudoers 文件以允许您的用户运行该特定命令而无需使用 sudo 进行身份验证.
  • 说服 sshpasssudo 上做惯常的把戏迅速的。我没有尝试过,但它可能就像做 sshpass -p password sudo something 一样简单.如果没有,我好像记得最新版本的sshpass有办法更改其预期的密码提示(类似于 expect 正在做的事情)。 sshpass 中的最新提交svn 似乎是它,但我相当肯定我并没有真正发布具有此功能的版本。

  • 警告 : 做#3,风险自负。 #3 的含义是您正在以可恢复的形式将用户的密码存储在某个文件系统中。尽你所能避免这个选项。

    更新 : 1.06 版的 sshpass 现在在 sourceforge 下载站点上。已确认与 sudo 合作, 它包含密码提示说明符以提供帮助。仍然不推荐此解决方案。

    关于bash - Linux - Bash 登录到机器然后成为 root,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38111753/

    相关文章:

    java - 通过 bash 脚本执行 jar 文件

    macos - Git 命令在 OSX 上需要 sudo

    php - 我需要在我的服务器上运行我作为任务编写的 PHP 脚本

    linux - 使用sudo时如何保留环境变量

    bash - 使用 bash 脚本在同一终端上执行多个命令

    Bash:启动并终止子进程

    macos - 您可以使用set -e增强Mac Terminal的错误处理能力吗?

    regex - 使用 grep 查找以/dev/开头的每个单词,包含此后的任何字符,直到空格

    bash - 让远程Shell评估期望ssh脚本中的表达式

    javascript - 使用 Javascript 在浏览器中发送 SSH 命令