Единая регистрация SSH обычно достигается с помощью аутентификации с открытым ключом и агента аутентификации. Вы можете легко добавить свой тестовый ключ VM к существующему агенту аутентификации (см. Пример ниже). Существуют и другие методы, такие как gssapi / kerberos, но они более сложны.
sshpass
В ситуациях, когда password
доступен только один способ аутентификации, sshpass может использоваться для автоматического ввода пароля. Пожалуйста, обратите особое внимание на раздел « Безопасность » на странице руководства . Во всех трех вариантах пароль виден или хранится в незашифрованном виде в какой-то момент :
Анонимный канал (рекомендуется sshpass)
# Create a pipe
PIPE=$(mktemp -u)
mkfifo -m 600 $PIPE
# Attach it to file descriptior 3
exec 3<>$PIPE
# Delete the directory entry
rm $PIPE
# Write your password in the pipe
echo 'my_secret_password' >&3
# Connect with sshpass -d
sshpass -d3 ssh user@host
# Close the pipe when done
exec 3>&-
Это довольно громоздко в bash, возможно, проще с языками программирования. Другой процесс может подключиться к вашему каналу / fd до того, как будет написан пароль. Окно возможностей довольно короткое и ограничено вашими процессами или корнем.
Переменная среды
# Set your password in an environment variable
export SSHPASS='my_secret_password'
# Connect with sshpass -e
sshpass -e ssh user@host
Вы и пользователь root можете читать переменные окружения вашего процесса (т. Е. Ваш пароль) во время работы sshpass ( cat /proc/<pid>/environ | tr '\0' '\n' | grep ^SSHPASS=
). Окно возможностей намного длиннее, но все еще ограничено вашими собственными процессами или корнем, а не другими пользователями.
Аргумент командной строки (наименее безопасный)
sshpass -p my_secret_password ssh user@host
Это удобно, но менее безопасно, как описано на странице руководства. Аргументы командной строки видны всем пользователям (например ps -ef | grep sshpass
). sshpass пытается скрыть аргумент, но все равно есть окно, в котором все пользователи могут видеть ваш пароль, переданный по аргументу.
Примечание
Задайте для переменной bash HISTCONTROL значение ignorespace
или ignoreboth
и добавьте к своим чувствительным командам пробел. Они не будут сохранены в истории.
SSH аутентификация с открытым ключом
# Generate a key pair
# Do NOT leave the passphrase empty
ssh-keygen
# Copy it to the remote host (added to .ssh/authorized_keys)
ssh-copy-id user@host
Пароль очень важен. Любой, кто получит файл с закрытым ключом, не сможет использовать его без ключевой фразы.
Настройте агент аутентификации SSH
# Start the agent
eval `ssh-agent`
# Add the identity (private key) to the agent
ssh-add /path/to/private-key
# Enter key passphrase (one time only, while the agent is running)
Подключите как обычно
ssh user@host
Преимущество заключается в том, что ваш закрытый ключ зашифрован, и вам нужно ввести его пароль только один раз (с помощью более безопасного метода ввода).