我正在尝试连接服务器并进入每个目录。但当我尝试通过SSH连接到 server1 的第一台服务器时,它给我的错误是
由于stdin不是终端,因此不会分配伪终端。
这是下面的配置文件和bash脚本:
getPatches.cfg
SERVERLIST="server1;server2"
USERNAME=bob
DIRECTORY=/net/bob
bash脚本
#!/bin/sh
CFGFILE=getPatches.cfg
if ! [ -f $CFGFILE ] ; then
echo "ERROR: $CFGFILE configuration file is missing"
exit 1
fi
# READ $CFGFILE
. $CFGFILE
servers=$SERVERLIST
user=$USERNAME
directory=$DIRECTORY
#Tokenize ServerList
while IFS=';' read -ra ADDR; do
for i in "${ADDR[@]}"; do
ssh $user@$i
AccessIntoDirectory="cd $directory"
export AccessIntoDirectory
ssh -q $i $AccessIntoDirectory
done
done <<< "$servers"
我已经生成了一个SSH公钥,这个脚本应该做的是SSH进入服务器并进入我想要的目录,但它退出而没有SSH进入服务器。任何帮助都会很棒!
答案 0 :(得分:1)
首先检查一下
行ssh $user@$i
它不提供命令,因此您的脚本会尝试在远程主机上启动交互式shell。那是你从中获得错误的地方。
其次,我想检查一下你是否意外地使用了反对“`而不是刻度线'&#39;&#39;或双引号&#34;&#34;与
一致`AccessIntoDirectory=`cd $directory`
会错误地运行&#39; cd&#39;命令并将其输出分配给变量。
答案 1 :(得分:1)
在不使用控制台(tty)的情况下使用ssh命令的解决方案是添加-t -t选项。
ssh -t -t $user@$i