Согласно nano's
строка заголовка, Вы редактируете файл истории удара после нажатия v:
/tmp/bash-fc-1212173730
Я подозреваю, что Ctrl-Left и Ctrl-Right активируют интерактивный режим истории.
Делает Ваш .bashrc
содержите привязку для history-search-backward
и history-search-forward
?
Можно отключить это поведение путем комментирования или удаление, любой из тех связывает строки в Вашем .bashrc
или в .bash_aliases
.
Это очень просто с достаточно недавними версиями OpenSSH, если Вы планируете заранее.
Откройте основное соединение в первый раз. Для последующих соединений направьте ведомые соединения посредством существующего основного соединения. В Вашем ~/.ssh/config
, настройте совместное использование соединения для случая автоматически:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
При запуске ssh сессии к тому же (пользователь, порт, машина) как существующее соединение, вторая сессия будет туннелирована по первому. Установление второго соединения не требует никакой новой аутентификации и очень быстро.
Это довольно легко достигнуть использования nc инструмента и туннелей ssh.
На Вашей ssh сессии введите ~C на новой строке. Вы получите ssh подсказку "сервисной консоли", которая похожа на это:
ssh>
Тип в локальном направляет команду для открытия туннеля ssh:
ssh> -L22000:targethost:22001
Forwarding port.
Где targethost
имя хоста или IP-адрес машины, с которой Вы подключены.
Теперь, принятие ssh сервера на целевой машине не было настроено для запрещения туннелей, у Вас есть желаемая передача соединения: ssh
клиент на Вашей машине слушает порт 22000, и это передаст любой трафик, отправленный в него к 22 001 порту на targethost
.
Это уже столь же просто как ввод Ваш открытый ssh сессия следующая команда:
remote$ nc -l localhost 22001 | sh
Это запустит сервер TCP, слушающий на порте 22001 – который является целевым портом нашего туннеля ssh – и направьте полученные данные (по-видимому, окружите команды) к a targethost
экземпляр оболочки.
local$ cat yourscript.sh | nc localhost 22000
Это отправит тело сценария в Ваш туннель ssh и закончит тем, что было выполнено в оболочке на targethost
. Вы будете видеть вывод сценария в своем терминале с ssh сессией.
Я также отмечу, что ssh туннелируют (шаг 1.) в этом сценарии строго не требуется; Вы могли также запустить открытый сервер и соединиться с ним непосредственно по Интернету. Однако необходимо будет использовать туннель, если целевой узел не может быть достигнут непосредственно (например, находится позади NAT), или шифрование SSH желаемо.
~
символ должен прибыть после новой строки, таким образом, LF ~ C
вероятно, лучшая последовательность.
– Alexios
06.03.2012, 16:54
less
, общий пейджер по умолчанию, поиск поддержек, который может сохранить Вас некоторая прокрутка, если Вы знаете свои ключевые слова: просто введите man ssh
/ESCAPE
и Вы там.
– ulidtko
18.02.2015, 22:12
Потребовалось некоторое время, чтобы заставить это работать, см. здесь для полного примера и пояснений.
Короче говоря, вам нужно:
создать файл конфигурации ssh, содержащий информацию о ssh сеанс
remote=your_ip_address
echo "HostName $remote" > ssh_config
echo "User root" >> ssh_config
echo "ControlMaster auto" >> ssh_config
echo "ControlPath ~/.ssh/%C" >> ssh_config
master_ssh='ssh -F ssh_config'
запустить основной сеанс
$master_ssh -MNf $remote
выполнить rsync
rsync -e "$master_ssh" $opts $remote:/etc/some_file1 local_directory/
rsync -e "$master_ssh" $opts $remote:/etc/some_file2 local_directory/
rsync -e "$master_ssh" $opts $remote:/etc/some_file3 local_directory/
закрыть основной сеанс
$master_ssh -O exit $remote
/var/log/secure
и/var/log/auth.log
зарегистрируйте соединения SSH; ведомое соединение не появляется там, потому что оно осуществляет контрейлерные перевозки на существующем соединении. Если Ваша ssh сессия выделяет терминал (т.е.ssh somehost
без команды, предоставленной, илиssh -t
), это (обычно) зарегистрированоwtmp
, независимо от того, как появился тот терминал (sshd независимо от того, что метод использовался для установления соединения, приложения эмулятора терминала, …). – Gilles 'SO- stop being evil' 06.09.2013, 18:51ControlPersist 600
который является задержкой в секундах сокета, находящегося в неактивном, прежде чем он будет автоматически удален. Иначе это закроется автоматически, когда основное соединение закончится. Это бесполезно для выполнения ряда команд удаленно (например, ряда команд rsync к различным папкам) – 19.06.2016, 04:05-S
(укажите сокет), и-M
(создайте основное соединение) клиента SSH. – yankee 07.10.2016, 23:07