Запустить команду на удаленном сервере через SSH - без выхода

Вы можете посмотреть здесь, вы найдете много смешных расширений хрома:

https://chrome.google.com/webstore/search-extensions/screenshot?hl=ru- US

И этот спорный разговор о некоторых других:

https://chrome.google.com/webstore/search-extensions/screenshot?hl=ru-RU [ ! d2]

1
задан 21 February 2016 в 07:50

3 ответа

Просто выполнить bash должно быть достаточно:

 sshpass -f <password_file> ssh <user@ipaddress> 'who; bash';
5
ответ дан 23 May 2018 в 16:42
  • 1
    Как будет выполняться bash дать мне вывод who ...? – Michael Hoffmann 21 February 2016 в 07:46
  • 2
    bash просто не очистит историю терминала (по крайней мере, по умолчанию), поэтому вы должны увидеть все предыдущие строки. AFAIU эти строки не будут доступны для какой-либо автоматической обработки, но это не должно быть проблемой в вашем случае. Кроме того, если вы используете plain ssh, вам придется использовать клавишу -t. – int_ua 21 February 2016 в 07:55
  • 3
    О, может быть, вы видели первую ревизию ответа, когда я забыл добавить who, так это в случае? – int_ua 21 February 2016 в 07:57
  • 4
    @MichaelHoffmann Без -t SSH не будет выделять TTY, а интерактивные программы, такие как оболочки, редакторы и т. Д., Будут очень странными (или вообще не сработают). (Вы также хотите запустить bash -l для .profile, чтобы вступить в силу.) – muru 21 February 2016 в 08:03
  • 5
    Это в значительной степени то, что будет использоваться с ssh или локальным терминалом. Основная идея - command; shell или shell -c ' command1;commad2; shell `. Хороший ответ – Sergiy Kolodyazhnyy 21 February 2016 в 08:11

Это ответ, но определенно не ответ.

Я обнаружил, что sshd (демон для служб ssh на удаленном хосте) будет запускать команды в ~ / .ssh / rc при подключении , Я только что создал этот файл и добавил who там, и теперь каждый раз, когда я делаю удаленное соединение, отображается список пользователей, и я все равно получаю оболочку для входа.

На удаленном хосте:

File ~/.ssh/rc:

#!/bin/bash

# This file is executed by sshd when a remote connection is started over ssh
who

На клиенте:

In file ~/.bash_aliases:

#!/bin/bash

# ssh to the linux lab. Takes hostnames defined in ~/.ssh/config as 
# parameters
function sshll()
{
    if [ "$@" ]
      echo "Connecting to hostname $@";
      sshpass -f <password_file> ssh $@;
    else
      echo "Connecting to default host";
      sshpass -f <password_file> ssh <user@ipaddress>;
    fi
}

Мне все еще интересно узнать, как это сделать с клиентской стороны, однако для других пользователей с аналогичными проблемами, которые не могут использовать ~ /.ssh/rc из-за отсутствия разрешений или по какой-либо другой причине.

3
ответ дан 23 May 2018 в 16:42

Ответ int_ua - это то, что я буду использовать. Для полноты, если вы можете редактировать свои собственные .profile или .bashrc на удаленном сервере, вы можете добавить это к одному:

if [[ -n $SSH_TTY ]]
then
    who
fi

SSH устанавливает различные переменные, один из которых [ f5] - вы можете проверить эти переменные, чтобы определить, подключены ли вы через SSH. Ограничения на ~/.ssh/rc не должны помешать вам использовать это.

Я использую это, чтобы установить мое приглашение (обратите внимание, как я пропускаю имя хоста для локальных оболочек):

[F2]
3
ответ дан 23 May 2018 в 16:42

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

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