2

我正在尝试使用我的普通用户登录 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 的不同

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

有任何想法吗?!!

4

2 回答 2

1

你提出来很有趣sshpasssshpass旨在绕过ssh以交互方式提供密码的要求。你所面临的问题,原因expect不起作用,是sudo完全相同的把戏,出于完全相同的原因。

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

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

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

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

于 2016-06-30T18:23:04.597 回答
0
:- you can try these commands in your linux terminal --:

如果你知道密码

  $ su     
      
    OR        
      
  $ su -   
     

如果您不知道[记住/设置]密码

  $ sudo su    
           
     OR             
           
  $ sudo su -   
          
于 2020-12-25T06:29:21.743 回答