Команда HostName SSH на удаленном сервере отображает имя хоста локального сервера

Я запускаю эту команду SSH с Server1 на Server2:

ssh server2 echo pasword | su - root  -c "echo this is the  `hostname`" 

Я ожидал, что Результат, чтобы быть именем хоста Server2, но вместо этого я получаю имя хоста Server1. Как я могу манипулировать командой, чтобы получить имя хоста сервера 2?

Спасибо.

-1
задан 1 February 2021 в 17:22

2 ответа

Во-первых, ваш командный трубопровод не так. Как оно в настоящее время означает, что это выполняется в этом порядке:

  1. SSH Server2 Echo Pasword - это переходит на сервер 2 и входит в систему и выполняет команду Echo Pasword в удаленной системе. (Вывод будет Pasword Pasword )

  2. Возьмите вывод из # 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 на удаленных серверах вместо аутентификации паролей, где это возможно.

2
ответ дан 18 March 2021 в 23:38

Java (и другие плагины, такие как Flash) больше не поддерживается внутри браузера, по крайней мере, не в основных браузерах, доступных в Linux, таких как Chrome или Firefox. Единственный известный большой браузер, который все еще поддерживает плагин Java, это Internet Explorer я думаю, но, конечно, этот браузер не доступен в Linux.

-121--910939-

Во-первых, ваш командный трубопровод неправильный. В текущем виде это выполняется в следующем порядке:

  1. ssh server2 echo pasword - это переходит на сервер 2 и регистрируется и выполняет команду echo pasword на удаленной системе. (output будет pasword )

  2. Возьмите выходные данные из # 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 на удаленных серверах вместо проверки подлинности пароля, где это возможно.

-121--910927-

Здесь есть несколько вещей.

Сначала команда

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 в одинарные кавычки ,в противном случае он будет заменен на локальном компьютере перед отправкой на удаленный, поэтому он будет по-прежнему печатать ваше локальное имя хоста.

0
ответ дан 18 March 2021 в 23:38

Другие вопросы по тегам:

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