我有一个 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
- ^ 是终端中最接近的位置,我可以看到输入了 userBPassword,但没有任何反应,即 userB 没有被激活。
有没有办法将密码添加到~/.bash_profile
并在执行时提示时自动使用该密码su - userB
?因为暴露密码是一种不好的做法?
答案1
正在使用sudo
一个选项?然后你可以这样做:
echo userBPassword | sudo -S -u userB whoami
答案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