Linux 如何在shell脚本中将tee与sshpass一起使用
我有一种情况,需要将文件中的几行(ip和主机)附加到/etc/hosts 如果我执行下面的命令 sshpass-p密码cat/tmp/hosts | sudo tee-a/etc/hostsLinux 如何在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程序。对不起,请再试
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特有的。