如何在一行中通过su用户名切换用户时传递密码

如何在一行中通过su用户名切换用户时传递密码

我有一个 ec2 实例,我连接到它并执行以下操作:

[userA@ip-abcd ~]$ ssh my_ec2_instance 
[userA@ip-abcd ~]$ whoami  
userA   
[userA@ip-abcd ~]$pwd   
/home/userA  
[userA@ip-abcd ~]$ cd ~  
[userA@ip-abcd ~]$ pwd  
/home/userA  
[userA@ip-abcd ~]$ ls   
(shows nothing)  
[userA@ip-abcd ~]$ su userB  
Password:  
(I enter the password and the prompt changes to)    

bash-4.2$ pwd  
/home/UserA  

bash-4.2$ cd ~   
bash-4.2$ ls   
A B C D  

如何以非交互方式在一行中 su - userB 并输入密码?

为什么我需要执行上述操作:上面的文件夹 B 有我需要从 git 更新的代码,并且我想从 jenkins shell 脚本调用,该脚本将

  • ssh 进入实例
  • su用户B
  • 自动输入密码
  • git pull origin 大师
  • 蟒蛇wsgi.py

我尝试过的:

1) echo actual_password | su userB  
2) su userB -p actual_password 

3) echo userBPassword | su -c whoami userB  
  1. ^ 是终端中最接近的位置,我可以看到输入了 userBPassword,但没有任何反应,即 userB 没有被激活。

有没有办法将密码添加到~/.bash_profile并在执行时提示时自动使用该密码su - userB?因为暴露密码是一种不好的做法?

答案1

正在使用sudo一个选项?然后你可以这样做:

echo userBPassword | sudo -S -u userB whoami  

类似的问题:https://stackoverflow.com/questions/233217/how-to-pass-the-password-to-su-sudo-ssh-without-overriding-the-tty

答案2

您可以使用密钥来避免密码。在您的 ec2 计算机上以 userB 身份生成密钥对 - 将私钥复制到您登录的计算机并存储在 userA/.ssh/id_rsa_userB_ec2 中

编辑 UserA/.ssh/config 以添加新条目,例如

Host ec2
        Hostname my_ec2_instance
        Port 22
        User userB
        IdentityFile ~/.ssh/id_rsa_userB_ec2

在您的 ec2 计算机上,将公钥添加到authorized_keys 文件中。然后,您应该能够ssh ec2使用配置文件中的上述别名登录并将 id 更改为 userB

相关内容