Linux 如何在shell脚本中将tee与sshpass一起使用

Linux 如何在shell脚本中将tee与sshpass一起使用,linux,bash,shell,Linux,Bash,Shell,我有一种情况,需要将文件中的几行(ip和主机)附加到/etc/hosts 如果我执行下面的命令 sshpass-p密码cat/tmp/hosts | sudo tee-a/etc/hosts sshpass -p password sudo echo "Hello" cat /tmp/hosts | sudo tee -a /etc/hosts 我越来越 sudo:不存在tty,也未指定askpass程序。 对不起,请再试一次 sudo:不存在tty,也未指定askpass程序。对不起,请再试

我有一种情况,需要将文件中的几行(ip和主机)附加到/etc/hosts

如果我执行下面的命令

sshpass-p密码cat/tmp/hosts | sudo tee-a/etc/hosts

sshpass -p password sudo echo "Hello"
cat /tmp/hosts | sudo tee -a /etc/hosts
我越来越

sudo:不存在tty,也未指定askpass程序。 对不起,请再试一次

sudo:不存在tty,也未指定askpass程序。对不起,请再试一次

sudo:不存在tty,也未指定askpass程序。对不起,请再试一次

sudo:3次不正确的密码尝试

有其他选择吗?

怎么样

sudo -S sh -c 'cat /tmp/hosts >> /etc/hosts' <<< "password"
sudo-S sh-c'cat/tmp/hosts>/etc/hosts'怎么样

sudo -S sh -c 'cat /tmp/hosts >> /etc/hosts' <<< "password"
sudo-S sh-c'cat/tmp/hosts>/etc/hosts'怎么样

sudo -S sh -c 'cat /tmp/hosts >> /etc/hosts' <<< "password"
sudo-S sh-c'cat/tmp/hosts>/etc/hosts'怎么样

sudo -S sh -c 'cat /tmp/hosts >> /etc/hosts' <<< "password"

sudo-S sh-c'cat/tmp/hosts>/etc/hosts'您面临的错误来自这样一个事实:
sshpass
试图将密码发送到
cat
,而不是
sudo
。理论上,您的命令行应该是这样的:

cat /tmp/hosts |sshpass -p password sudo tee -a /etc/hosts
但是
sshpass
不会将
stdin
转发到
sudo
,因此这是一条死胡同。(
sudo
向前推进
stdin
,但这就是为什么像
sudo-tee
这样的东西可以工作的原因)

你可以这样做

sshpass -p password sudo echo "Hello"
cat /tmp/hosts | sudo tee -a /etc/hosts
这样,对
sudo
的第二次调用就不需要密码

另一个选项是在shell脚本中嵌入
cat
和重定向,然后

sshpass -p password sudo ./thescript.sh
或者您可以,正如@glennjackman所写,将
cat
和重定向嵌入到子shell中:

sshpass -p password sudo sh -c 'cat /tmp/hosts >> /etc/hosts'

当然,您可以将
sudo
配置为。

您面临的错误来自于
sshpass
尝试将密码发送到
cat
,而不是
sudo
。理论上,您的命令行应该是这样的:

cat /tmp/hosts |sshpass -p password sudo tee -a /etc/hosts
但是
sshpass
不会将
stdin
转发到
sudo
,因此这是一条死胡同。(
sudo
向前推进
stdin
,但这就是为什么像
sudo-tee
这样的东西可以工作的原因)

你可以这样做

sshpass -p password sudo echo "Hello"
cat /tmp/hosts | sudo tee -a /etc/hosts
这样,对
sudo
的第二次调用就不需要密码

另一个选项是在shell脚本中嵌入
cat
和重定向,然后

sshpass -p password sudo ./thescript.sh
或者您可以,正如@glennjackman所写,将
cat
和重定向嵌入到子shell中:

sshpass -p password sudo sh -c 'cat /tmp/hosts >> /etc/hosts'

当然,您可以将
sudo
配置为。

您面临的错误来自于
sshpass
尝试将密码发送到
cat
,而不是
sudo
。理论上,您的命令行应该是这样的:

cat /tmp/hosts |sshpass -p password sudo tee -a /etc/hosts
但是
sshpass
不会将
stdin
转发到
sudo
,因此这是一条死胡同。(
sudo
向前推进
stdin
,但这就是为什么像
sudo-tee
这样的东西可以工作的原因)

你可以这样做

sshpass -p password sudo echo "Hello"
cat /tmp/hosts | sudo tee -a /etc/hosts
这样,对
sudo
的第二次调用就不需要密码

另一个选项是在shell脚本中嵌入
cat
和重定向,然后

sshpass -p password sudo ./thescript.sh
或者您可以,正如@glennjackman所写,将
cat
和重定向嵌入到子shell中:

sshpass -p password sudo sh -c 'cat /tmp/hosts >> /etc/hosts'

当然,您可以将
sudo
配置为。

您面临的错误来自于
sshpass
尝试将密码发送到
cat
,而不是
sudo
。理论上,您的命令行应该是这样的:

cat /tmp/hosts |sshpass -p password sudo tee -a /etc/hosts
但是
sshpass
不会将
stdin
转发到
sudo
,因此这是一条死胡同。(
sudo
向前推进
stdin
,但这就是为什么像
sudo-tee
这样的东西可以工作的原因)

你可以这样做

sshpass -p password sudo echo "Hello"
cat /tmp/hosts | sudo tee -a /etc/hosts
这样,对
sudo
的第二次调用就不需要密码

另一个选项是在shell脚本中嵌入
cat
和重定向,然后

sshpass -p password sudo ./thescript.sh
或者您可以,正如@glennjackman所写,将
cat
和重定向嵌入到子shell中:

sshpass -p password sudo sh -c 'cat /tmp/hosts >> /etc/hosts'

当然,您可以将
sudo
配置为。

我不熟悉sshpass:它与sudo一起工作吗?这听起来是ssh特有的。我不熟悉sshpass:它和sudo一起工作吗?这听起来是ssh特有的。我不熟悉sshpass:它和sudo一起工作吗?这听起来是ssh特有的。我不熟悉sshpass:它和sudo一起工作吗?这听起来是ssh特有的。