#linux #bash #unix #ssh
#linux #bash #unix #ssh
Вопрос:
Я пытаюсь подключиться к серверам и компакт-дискам в каждом каталоге. Но когда я попытался подключиться по 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 к серверу и cd в каталог, который я хочу, но вместо этого он вышел и не подключился к серверу по SSH. Любая помощь была бы отличной!
Комментарии:
1. как вы обрабатываете пароли?
Ответ №1:
Решение использовать команду ssh без использования консоли (tty) — добавить опцию -t -t.
ssh -t -t $user@$i
Ответ №2:
Сначала проверьте строку
ssh $user@$i
Он не предоставляет команду, поэтому ваш скрипт пытается запустить интерактивную оболочку на удаленном хосте. Вот откуда вы получаете ошибку.
Во-вторых, я хотел бы проверить, случайно ли вы использовали обратные метки `вместо тиков » или двойные кавычки «» в строке с
`AccessIntoDirectory=`cd $directory`
который ошибочно запустил бы команду ‘cd’ и присвоил бы ее вывод переменной.
Комментарии:
1. Opps Извините, cd $ direcotory должен быть в двойных кавычках. Я попробовал SSH bob @server1, он успешно подключен к server1. Есть ли у вас какие-либо предложения о том, как решить ssh $ user @ $ i?
2. обычный
ssh user@server
запускает новый процесс ssh, подключается к внешнему хосту, пытается запустить интерактивную оболочку входа дляuser
(что не удается) и завершает работу обратно на ваш локальный хост. Затем он устанавливает$AccessIntoDirectory
значение «независимо» на вашем локальном хосте. После этого он запускает ‘cd whatever’ в качестве удаленной команды в новой оболочке и немедленно возвращается.