Я запускаю эту команду SSH с Server1 на Server2:
ssh server2 echo pasword | su - root -c "echo this is the `hostname`"
Я ожидал, что Результат, чтобы быть именем хоста Server2, но вместо этого я получаю имя хоста Server1. Как я могу манипулировать командой, чтобы получить имя хоста сервера 2?
Спасибо.
Во-первых, ваш командный трубопровод не так. Как оно в настоящее время означает, что это выполняется в этом порядке:
SSH Server2 Echo Pasword
- это переходит на сервер 2 и входит в систему и выполняет команду Echo Pasword
в удаленной системе. (Вывод будет Pasword
Pasword
)
Возьмите вывод из # 1 («Pasword») и труба, который в эту команду выполняется локально:
SU - root -C-ECHO Это `HostName `"
... который повторяет ваше локальное имя хоста, технически (и ничего не делает с повторенным «Pasword» из первой команды). (Вам не нужен «root» для этого, хотя - имя хоста
может быть запущена никому на удаленной системе или вашей локальной системе, без необходимости суперпользователя!).
Что вы нужно , чтобы сделать, это передавать команду в SSH, а не в трубы таким образом. Способ сделать это, это использовать это:
ssh server2 'echo "This is the $(hostname)"'
Это правильно отправит запрос на удаленный сервер, чтобы получить имя хоста из , который сервер и выполнить это на удаленном сервере и сообщить о ответе. Вам не нужно sudo
, чтобы сделать это на удаленном сервере .
Если вам нужно предоставить пароль для сеанса SSH, вы должны использовать SSH-Pass
вместо этого, и выполните это вместо этого:
sshpass -p YourPassword ssh server2 'echo "This is the $(hostname)"'
Это считается правильный подход Поскольку он выполняет клавиатуру-интерактивную
аутентификацию не интерактивно и передает пароль в команду ssh при предложении для пароля. Однако это все еще очень неуверенно, так как ваш пароль будет в истории команды или жесткозедирован в сценариях, поэтому вы должны рассмотреть возможность использования аутентификации клавиш SSH на удаленных серверах вместо аутентификации паролей, где это возможно.
Java (и другие плагины, такие как Flash) больше не поддерживается внутри браузера, по крайней мере, не в основных браузерах, доступных в Linux, таких как Chrome или Firefox. Единственный известный большой браузер, который все еще поддерживает плагин Java, это Internet Explorer я думаю, но, конечно, этот браузер не доступен в Linux.
-121--910939-Во-первых, ваш командный трубопровод неправильный. В текущем виде это выполняется в следующем порядке:
ssh server2 echo pasword
- это переходит на сервер 2 и регистрируется и выполняет команду echo pasword
на удаленной системе. (output будет pasword
)
Возьмите выходные данные из # 1 («pasword») и канала, которые в эту команду выполняются локально:
su - root -c «echo this is the 'hostname'»
... который перекликается с вашим именем хоста LOCAL, технически (и ничего не делает с эхо-словом «pasword» из первой команды). (для этого не требуется «root» - hostname
может быть запущен любым пользователем в удаленной системе или локальной системе, не требуется суперпользователь!).
Для этого необходимо передать команду в SSH, а НЕ в трубы. Это можно сделать следующим образом:
ssh server2 'echo "This is the $(hostname)"'
Запрос будет правильно отправлен удаленному серверу, чтобы получить имя хоста от этого сервера и выполнить его на удаленном сервере и сообщить ответ. Для этого не требуется sudo
на удаленном сервере .
Если требуется ввести пароль для сеанса SSH, вместо этого следует использовать ssh-pass
и выполнить следующее:
sshpass -p YourPassword ssh server2 'echo "This is the $(hostname)"'
Это считается правильным подходом , так же как и keyboard-interactive
аутентификация неинтерактивно Однако это все еще очень небезопасно, так как ваш пароль будет находиться в истории команд или жестко закодирован в скриптах, поэтому следует рассмотреть возможность использования проверки подлинности ключа SSH на удаленных серверах вместо проверки подлинности пароля, где это возможно.
Здесь есть несколько вещей.
Сначала команда
ssh server2 echo pasword | su - root -c "echo this is the `hostname`"
выполняет следующее:
запускает команду echo pasword
на удаленном сервере server2
через ssh
и передает выходные данные этой команды на следующую команду, выполняемую на локальном компьютере:
su - root -c «echo это» имя хоста «»
Если вы хотите, чтобы весь канал, начиная с эхо
, выполнялся на удаленном компьютере, вы должны сделать этот путь:
ssh server2 'echo pasword | su - root -c "echo this is the `hostname`"'
Но это не идти на работу, потому что su
требует запуска с терминала и просто прервет с сообщением об ошибке. Однако для выполнения команды hostname
не требуется права root, поэтому можно просто попытаться
ssh server2 echo 'this is the `hostname`'
Включить замену hostname
в одинарные кавычки ,в противном случае он будет заменен на локальном компьютере перед отправкой на удаленный, поэтому он будет по-прежнему печатать ваше локальное имя хоста.