Команда ssh и неинтерактивная оболочка без входа в систему

Я бы использовал механизм bash history:

$ echo 'foo\bar\baz'
foo\bar\baz
$ !!:gs/b/B/
echo 'foo\Bar\Baz'
foo\Bar\Baz

Однако я не могу заставить его заменить обратные слеши

$ echo 'foo\bar\baz'
foo\bar\baz
$ !!:gs/\\/\//
bash: :gs/\\/\//: substitution failed

4
06.03.2017, 10:52
2 ответа

Когда запускать ssh example.com my-script-which-is-on-the-remote-machine, имя учетной записи и пароль по-прежнему запрашиваются локально.

Это все еще не интерактивная оболочка входа в систему!

Интерактивность оболочки входа не определяется случаем «вы вводите логин и пароль». Ваш локальный ssh запрашивает пароль (или используются ключи), он передает их на удаленный sshd сервер, и только если они правильно проверены, вам предоставляется оболочка (если вы не используете UseLogin yes в sshd_config , что довольно опасно).

2
27.01.2020, 20:53

Логин является основной концепцией на жаргоне--login shell.
Для описания работы Linux выделяют четыре этапа: Init, Getty, Login, Shell.
Здесь логин — это программа, которая получает имя пользователя в качестве параметра и запрашивает у пользователя пароль.
На локальной стороне:

vim   /tmp/shell.sh   
shopt login_shell 

На стороне сервера (мой сервер vps):

vim   /tmp/shell.sh   
shopt login_shell 

1. неинтерактивная оболочка входа в систему
общий формат: ssh example.com <мой-скрипт-который-хранится-локально

ssh  root@vps_ip  < /tmp/shell.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
login_shell     on

Более четко

ssh -t -t root@vps_ip  < /tmp/shell.sh
Last login: Wed Mar  8 03:16:00 2017 from vps_ip
root@localhost:~$ 
root@localhost:~$ shopt login_shell 
login_shell     on

Интерпретатор на локальной стороне break ssh -t -t root@vps_ip < /tmp /shell.sh на две части.
1.ssh -t -t root@vps_ip
Программа входа в систему принимает root как пользователя на vps, вошла в систему.
2./tmp/shell.sh
сценарий на локальной стороне передается в качестве параметра интерпретатору на удаленной стороне и выполняется.

Это неинтерактивная оболочка входа в систему во время процесса.

2. неинтерактивная оболочка без входа в систему
общий формат:пример ssh.com мой скрипт, который хранится на удаленной машине

debian8@hwy:~$ssh   root@vps_ip  '/bin/bash /tmp/shell.sh'
login_shell     off
debian8@hwy:~$

Это неинтерактивная оболочка без входа в систему во время процесса.

Некоторые хакерские трюки позволяют отображать его как оболочку входа в систему.

debian8@hwy:~$ssh   root@vps_ip  '/bin/bash --login /tmp/shell.sh'
login_shell     on
debian8@hwy:~$

Сервер vps не заходит после выполнения всей команды ssh root@vps_ip '/bin/bash --login /tmp/shell.sh'.
login_shell на не отображал значения, он вошел в систему, но сервер vps закрыл соединение, вышел из системы.
Выводы Жиля о неинтерактивной оболочке входа и неинтерактивной оболочке без входа верны.

3
27.01.2020, 20:53

Теги

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