Всё проверено на OpenSSH 9.6p1, подключением к живому sshd.
Увидеть, какие параметры реально применились
ssh -G user@host
Отдаёт итоговый конфиг после разбора всех
Host и Match: порт, пользователя, список шифров, таймауты. Быстрее, чем перечитывать ~/.ssh/config глазами и гадать, какая секция сработала. Если сессия висит — ssh -vvv покажет, на каком этапе.Выполнить локальный скрипт на сервере
ssh user@host bash -s arg1 arg2 < ./script.sh
Нюанс:
-s обязателен, если передаёшь аргументы. Без него bash примет arg1 за имя файла и ответит No such file or directory. И второе: интерактивный read внутри такого скрипта работать не будет — stdin уже занят самим скриптом.Убрать устаревший ключ хоста
ssh-keygen -f ~/.ssh/known_hosts -R '[10.0.0.1]:2222'
Нюанс: для нестандартного порта нужен формат
[host]:port в кавычках. Просто -R 10.0.0.1 строку не найдёт и молча ничего не сделает. Старый файл сохраняется рядом как known_hosts.old.Забрать каталог без промежуточных файлов
ssh user@host "tar -cf - -C /data ." | tar -xC ~/bak/
Нюанс:
-C на удалённой стороне обязателен. Вариант tar -cf - /data утащит в архив весь абсолютный путь, и локально ты получишь ~/bak/data/... вместо содержимого. Проверил — распаковалось именно так.Уйти в фон сразу после авторизации
ssh -f user@host "sleep 300"
Управление вернулось через 181 мс, при этом клиентский процесс продолжает висеть, пока команда не отработает. Удобно для проброса портов:
ssh -f -N -L 9998:localhost:15672 user@host.Держать ключ в агенте ограниченное время
ssh-add -t 30 ~/.ssh/id_ed25519
Через 30 секунд ключ уйдёт из памяти агента сам. Нюанс: без запущенного
ssh-agent команда просто скажет Could not open a connection to your authentication agent.Про
sshpass из подборок: он кладёт пароль в аргументы процесса, где его видно в ps любому пользователю системы. Для закрытого стенда — ладно, дальше стенда лучше ProxyJump и ключи.А чем пробрасываете доступ к внутренним панелям —
-L руками или прописываете в конфиг?#Linux #SSH #Networking #DevOps #Terminal