Как бы я подключился к другому компьютеру через SSH в одну линию? Если бы я это сделал ssh host@IP
, мне потребовалось бы ввести пароль во второй строке. Я думал, что мог бы сделать что-то вроде этого:, ssh host@IP | echo password
но это вводит пароль, прежде чем спрашивать пароль.
27
ssh
бы прочитал пароль из stdin, тоecho password | ssh host@IP
работал бы, но обычно SSH пытается читать прямо из терминала.Ответы:
Вы должны использовать ключи SSH для аутентификации, а не вводить пароль в командной строке, так как это крайне небезопасно.
Это работает так, как только вы настроили ваши SSH-ключи, все, что вам нужно сделать, это выполнить команду:
и без ввода другой вещи, вы будете автоматически авторизованы.
Скопируйте открытый ключ SSH в Mac / FreeBSD / Linux из macOS
Это предполагает, что у вас есть доступ к удаленному серверу с помощью аутентификации на основе пароля (ввод пароля), и что вы уже сгенерировали свою частную / открытую пару ключей (если нет, см. Ниже). В следующем примере мы используем RSA. Для начала давайте скопируем ключ (учтите, что «домашний» каталог отличается в macOS, Linux, BSD и т. Д.):
Используя SCP:
Или просто присваивать файл
authorized_keys
(я предпочитаю этот метод):(Ваше имя ключа может отличаться). Если каталог .ssh не существует на удаленном сервере, вам нужно будет войти и создать его.
Теперь ключ был скопирован с Mac на удаленный сервер. Установите правильные разрешения для открытого ключа SSH на удаленном сервере:
Затем добавьте ключ в файл авторизованного ключа SSH, если файл не существует, создайте его.
Если файл
authorized_keys
уже существует,~/.ssh
используйте следующую команду:Если файл не существует, введите следующие команды:
Создать SSH открытый / закрытый ключ на macOS
Откройте Терминал, перейдя в Приложения -> Утилиты -> Терминал
В терминале используйте следующую команду для запуска генерации ключа
Далее вам будет предложено указать место, где вы хотите создать файл закрытого ключа:
Введите файл для сохранения ключа (
/Users/username/.ssh/id_rsa
):Оставьте это поле пустым, чтобы создать ключ в расположении по умолчанию
/Users/username/.ssh/id_rsa
. Файл открытого ключа будет создан в том же месте и с тем же именем, но с расширением .PUB.После этого вам будет предложено выбрать пароль. Это необязательный пароль для использования закрытого ключа.
Ваш ключ SSH сгенерирован.
Имейте в виду, что если вы введете парольную фразу, вам потребуется вводить ее каждый раз при подключении. Утилита
ssh-agent
сохранит парольную фразу в памяти, избавляя от необходимости вводить ее вручную каждый раз, когда вы подключаетесь, когда находитесь в том же сеансе. Для более подробной информации смотритеman ssh-agent
источник
ssh-copy-id
это хороший инструмент для автоматизации некоторых из вышеперечисленных.Есть несколько возможностей. Ваш пример, очевидно, не будет работать, но вы можете добиться чего-то подобного, используя
sshpass
утилиту:Обратите внимание, что это не рекомендуется, поскольку
password
они будут видны для других процессов или в истории оболочки.Гораздо лучший способ сделать то же самое - настроить аутентификацию без пароля с использованием ключей SSH. Короче говоря:
источник
sshpass
как вы рекомендовали, но он сказал, что команда не найдена.ps auxw | grep sshpass
которая сообщит другим пользователям пароль ssh.pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh pi@192.168.0.208
.zzzzzzzz
Буквально; sshpass маскирует содержимое пароля. Возможно, более ранние итерации были менее конфиденциальны.Я тоже долго искал ответ на этот вопрос. Несмотря на то, что это небезопасно и все эти люди говорят вам использовать ключи RSA ( что является более безопасной и надежной идеей ), это вполне возможно.
Используйте программу
expect
для этого. Expect будет наблюдать за stdout (и я думаю, что stderr, если он настроен правильно), ожидает определенных сообщений и отвечает на них выводом. Сам по себе Expect на самом деле является языком сценариев, и когда я делал то же самое, мне было очень трудно заставить свой собственный сценарий работать должным образом из-за времени. Однако, ожидайте также включает удобную утилиту под названиемautoexpect
.С помощью autoexpect он будет наблюдать за вами и генерировать ожидаемый скрипт для вас. Просто запустите autoexpect и команду, которую вы хотите:
и делай то, что ты обычно делаешь. Когда вы выходите из программы (набирая
exit
в командной строке ssh'd), она генерирует скрипт. Если вы не хотите, чтобы весь сценарий, который вы пишете, был в ожидаемом сценарии, вы можете отредактировать сценарий из autoexpect (вызываемогоscript.exp
) для выхода перед вводомexit
команды в оболочку. Строка, которую вы хотите переместить, чтобы изменить окончание скрипта:что означает ожидать конца файла. Надеюсь это поможет!
источник
Использовать
expect
просто неправильно для входа в ssh-соединение для чего-либо, кроме тестового набора.То, что ищет @ ben-a, уже реализовано в ssh. Хитрость в том, как это использовать. Так что здесь идет:
ssh-keygen
. Используйте ECDSA или RSA в качестве-t
(или типа), а для RSA используйте 2048 или 4096 в качестве-b
(или длины BITS). Этого должно хватить на момент написания. ВСЕГДА используйте ПАРОЛЬ!ssh-copy-id
или вышеупомянутую методологию, чтобы создать на компьютере, на котором вы входите (или на сервере),~/.ssh/authorized_keys
файл. Внутри есть копия открытого ключа, который вы только что сгенерировали.~/.ssh/config
. Если он не существует, вы можете создать его.В этом файле вы добавляете следующее для своих нужд
Теперь вы можете использовать только
ssh <name>
для настройки соединения, но для вашего ключа все равно потребуется пароль. Чтобы решить эту проблему, используйте специально разработанный ssh-агент для этой цели. Чтобы добавить свой ключ к агенту просто используйтеssh-add <path to keyfile>
. Вам будет предложено ввести пароль, и он будет надежно хранить ключ для этого сеанса. Если выдается ошибка «не удается найти ssh-agent» (или аналогичную), это означает, что, возможно, агент не был запущен. Вы можете запустить его для этой сессии, используяssh-agent bash
. Это запустит новую оболочку с активным агентом.Используя эти шаги, вам не только будет труднее выдавать себя за другого, похищая ваши учетные данные, но и поддерживать удобство использования в порядке (его проще использовать, чем простые пароли).
источник