![ssh :用户和主机 / host_ip 作为变量](https://linux22.com/image/749688/ssh%20%EF%BC%9A%E7%94%A8%E6%88%B7%E5%92%8C%E4%B8%BB%E6%9C%BA%20%2F%20host_ip%20%E4%BD%9C%E4%B8%BA%E5%8F%98%E9%87%8F.png)
我想创建一个包含变量的数组$user
并将$host
它们传递给ssh
命令。
我努力了:
my_array=('something1' 'something2' 'user' 'host_ip')
sudo ssh ${my_array[2]}@${my_array[3]}
my_array=('something1' 'something2' 'user' 'host_ip')
sudo ssh host -l ${my_array[2]} ## here host is not a variable
my_array=('something1' 'something2' 'username' 'host_ip')
my_var="${my_array[2]}@${my_array[3]}"
sudo ssh $my_var
在所有情况下,我都会被要求输入本地用户密码(因为sudo
),并且我的答案被接受。当我输入远程用户密码时,我得到以下输出,然后我可以再试一次:
Permission denied, please try again.
笔记:
- 我使用 IP 作为主机
- 我的密码是正确的,并且当我不使用变量(
sudo ssh user@host
)时它可以正常工作。 - 我最近安装了 sshpass 包
非常感谢!
编辑
由于某种原因,第二天上述所有方法和下面的解决方案都起作用了...有人能解释一下吗?
答案1
我认为这是引用问题,在变量中添加双引号:
my_array=('something1' 'something2' 'user' 'host')
sudo ssh ${my_array[2]}@"${my_array[3]}"
答案2
问题在于数组的主机元素中的引号,因为我使用的是 IP。当使用 IP 作为主机时,似乎需要一个数字元素。因此代码应该是:
my_array=('something1' 'something2' 'user' host_ip)
sudo ssh ${my_array[2]}@${my_array[3]}