Отсутствует первая строка при конкатенации вывода SSH [закрыто]

0
22.02.2016, 00:06
2 ответа

Вторая строка не игнорируется, она скрыта. Чтобы увидеть это, запустите

echo "$STR3" | cat -v

Проблема в том, что STR1 заканчивается символом возврата каретки . Этот символ указывает терминалу переместить курсор обратно в начало строки. Он генерируется непосредственно перед обычным символом новой строки (перевода строки). Причина его появления заключается в том, что вы указали SSH эмулировать терминал с параметром -t , чтобы все было правильно отображено. Это не дает полезного результата, когда вы записываете вывод в строку.

Показанные вами команды можно запускать от имени любого пользователя, поэтому sudo не требуется. Если вам не нужен sudo, вам не нужен -t .

STR1=`ssh -q -i "$KEYFILE" "$USERNAME@$MASTER" -p 22 'hostname'`
STR2=`ssh -q -i "$KEYFILE" "$USERNAME@$MASTER" -p 22 "grep search /etc/resolv.conf" | awk {print $2}`
STR3="$STR1$STR2"

Если вашему настоящему сценарию абсолютно необходимо sudo, удалите символы возврата каретки.

STR=`ssh -t … 'sudo mycommand' | tr -d '\r'`

Объединение ssh и sudo обременительно. При повышении привилегий проще придерживаться SSH. Для этого необходимо разрешить учетной записи root войти в систему с помощью SSH. В отличие от того, что вы, возможно, читали в другом месте, это небезопасно по своей сути. Риски повышения привилегий от локального пользователя до root обычно переоцениваются ); если злоумышленник имеет доступ к учетной записи sudoer, он в любом случае имеет доступ к root. Однако для сохранения полезных журналов лучше ограничить прямой доступ к учетной записи root. Вы можете авторизовать доступ к root для локальных пользователей, только поместив следующие директивы в sshd_config :

PermitRootLogin no
…
Match Address 127.0.0.1,::1
    PermitRootLogin yes
Match User root
     PasswordAuthentication no
     GSSAPIAuthentication
     KbdInteractiveAuthentication no

Тогда root будет разрешен вход через SSH, но только с аутентификацией по ключу и только через localhost.После настройки ключей вы можете связать входы SSH в цепочку:

STR=`ssh … 'ssh root@localhost "mycommand"'`
2
28.01.2020, 02:35

Вы не показываете нам результат работы вашего скрипта, или в вашем STR2 есть странные значения.

Обновите сценарий так, чтобы он заканчивался на:

#!/bin/bash


STR1="ip-10-30-209-xx"
STR2="a ap-xxx-1.compute.internal"


STR2=`echo $STR2 | awk '{print $2}'`
echo 'str1['$STR1']'
echo 'str2['$STR2']'
STR3="$STR1""$STR2" #OR "$STR1$STR2" OR $STR1$STR2

echo  'str3['"$STR3"']'

, что дает:

str1[ip-10-30-209-xx]
str2[ap-xxx-1.compute.internal]
str3[ip-10-30-209-xxap-xxx-1.compute.internal]

затем пошагово заменяет назначения своими собственными

0
28.01.2020, 02:35

Теги

Похожие вопросы