Проблема:
У меня нет корневого доступа к серверу (т.е. я не могу / не хочу изменять конфигурацию общесистемного сервера), и я хочу использовать scp с альтернативным файлом идентификации (например, .ssh/id_rsa_for_scp
) для автоматизации загрузки некоторых файлов с сервера, но я не хочу того же ключ для доступа к серверу через ssh.
После копирования ключевого файла на сервер:
ssh-copy-id -i ~/.ssh/id_rsa_for_scp legendaryuser@192.168.1.1
(Чтобы упростить пример, мы предположим, что клиентский компьютер ~ / .ssh / config уже настроен. Подробнее о ~/.ssh/config
бегать man ssh_config
)
Host testmachine
Hostname 192.168.1.1
User legendaryuser
BatchMode yes
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa_for_scp
Вам нужно будет отредактировать сервер /home/legendaryuser/.ssh/authorized_keys
файл.
Из:
ssh-rsa AAAAAC3nZCXExxHUEBR...
Кому: (эта версия позволяет скачивать и выгружать)
command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp.? ]]; then $SSH_ORIGINAL_COMMAND ; else echo Access Denied; fi" ssh-rsa AAAAAC3nZCXExxHUEBR...
Если вы хотите ограничить scp «режимом только для загрузки» и только файлами из определенного каталога, выполните:
command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp[[:space:]]-f[[:space:]]/full/path/to/dir/.? ]]; then $SSH_ORIGINAL_COMMAND ; else echo Access Denied; fi" ssh-rsa AAAAAC3nZCXExxHUEBR...
И наконец, давайте на всякий случай добавим к ключу еще несколько ограничений:
command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp[[:space:]]-f[[:space:]]/full/path/to/dir/.? ]]; then $SSH_ORIGINAL_COMMAND ; else echo ERRO Access Denied; fi",no-pty,no-port-forwarding,no-agent-forwarding,no-X11-forwarding ssh-rsa AAAAAC3nZCXExxHUEBR...
Вы можете увидеть более подробную информацию о authorized_keys
файл, запустив:
man sshd
Ps: Еще можно добавить from=xxx.xxx.xxx.xxx
для ограничения использования ключа от определенного IP-адреса или сети.
Pps: Извините за мой английский, я не носитель языка.