Как безопасно разрешить scp, но не ssh

Я работаю из Mac Book Pro (называется foo). У меня есть сервер, на котором мои клиенты обрабатывают большие файлы. (называемый бар). Я часто делаю ssh в bar и scp файл (называемый buzz) на мой Mac.

bob@foo$ ssh bar Last login: Fri Aug 23 14:49:32 2013 from foo bob@bar$ scp /guest/buzz bob@foo:~ Password: 

Я не хочу вводить пароль каждый раз, когда я просматриваю файл обратно на свой Mac, потому что в конечном итоге это автоматизирует его.
Я знаю, что могу настроить ssh-ключи, но я обеспокоен тем, что если кто-то взломает bar , они смогут легко получить доступ к foo . (Поправьте меня если я ошибаюсь)

Есть ли способ скопировать файл с бара в foo без пароля, который бы не дал кому-то полный доступ к оболочке моего Mac, если сервер был взломан?

Примечание. Я думаю, что настроить нового пользователя на моем Mac и отключить доступ к оболочке для этого пользователя может работать, но я чувствую, что есть лучший способ. Я бы предпочел не добавлять пользователей, если это возможно.

5 Solutions collect form web for “Как безопасно разрешить scp, но не ssh”

Хорошо, вы все испортили.

Из того, что я понял, вы просто хотите скопировать файл из бара в foo :

 [file] *bar* ------copy------> *foo* 

Чтобы сделать именно это, вы сначала ssh чтобы scp файл scp для foo :

  *bar* -------ssh------> *foo* [file] 

тогда:

  *foo* ----scp[file]---> *bar* 

Если вы так делаете, вы делаете это небезопасно и неправильно . Все, что вам нужно сделать, это скопировать файл прямо вам прямо:

 bob@foo$ scp bob@bar:/guest/buzz ~ 

другими словами:

  *foo* <---scp[file]---- *bar* 

Теперь есть несколько проблем, которые нужно решить …

Как узнать, где находится файл?

a) Использовать SSH в другом терминале

Просто откройте второй терминал, SSH, чтобы открыть его, найти файл и скопировать / вставить путь к первому.

b) Использовать SFTP

SFTP (не связанный с FTP или FTPS в любом случае!) Реализован в OpenSSH и доступен по умолчанию. Просто SFTP на сервер и используйте FTP-подобные команды, чтобы найти файлы и get их.

c) Использовать графический интерфейс

Например, Filezilla или Nautilus могут просматривать удаленные ресурсы SFTP / SSH.

d) Настройка сертификатов

Когда вы настраиваете соединение с сертификатом, вы можете выполнить табуляцию как на локальной, так и на удаленной стороне! Например, с вашим примером buzz вы можете сделать:

 bob@foo$ scp bob@bar:/guest/[tab][tab] 

и немного подождать для списка файлов, содержащихся в папке remote / guest /.

Как настроить SSH с сертификатами?

a) Если это еще не сделано, создайте свою персональную пару ключей RSA

Если вы установили клиент OpenSSH, вы можете сделать это, набрав

 bob@foo$ ssh-keygen -t rsa 

(посмотрите на руководство или онлайн для всех доступных опций). Он может запросить у вас пароль. Это не ваш локальный пароль учетной записи, а необязательный пароль, который можно использовать для шифрования закрытого ключа, который вы собираетесь создать.

На самом деле, вы создадите 2 файла:

  • /Users/[yourusername]/.ssh/id_rsa
  • /Users/[yourusername]/.ssh/id_rsa.pub

Первый, * id_rsa * должен быть закрытым . По умолчанию ssh-keygen сделает все возможное, чтобы не сделать его общедоступным (с разрешения доступа к файловой системе). Именно поэтому он также попросит вас (необязательный) пароль. Не будьте слишком параноидальными с этим, но просто помните * id_rsa * == personal key == private . Этот ключ никогда не должен покидать компьютер.

Второй – публичный. Это требует огромного количества мощности компьютера, чтобы вернуть свой секретный ключ из этого открытого сертификата (я действительно имею в виду HUUUUUUGE). Это совершенно безопасно, чтобы поделиться им со всем миром. Даже в очень маловероятном случае, когда NSA или подобные люди действительно хотят потратить миллионы долларов на взлом вашего открытого ключа, ваш macbook по-прежнему будет в безопасности … (или нет) Думайте об этом, если кто-то хочет потратить столько, вы находитесь в беда 🙂

Этот открытый сертификат – это то, что вы нажмете на панель удаленного сервера.

б) Как разместить мой публичный сертификат на сервере?

Два варианта.

  1. Используйте ssh-copy-id если доступно: bob@foo$ ssh-copy-id bob@bar . Готово.
  2. Если это не так , скопируйте ~/.ssh/id_rsa.pub в bar :

    bob @ foo $ sftp ~ / .ssh / id_rsa.pub bob @ bar: pub_cert

(здесь вы скопировали свой публичный сертификат id_rsa.pub из .ssh/ в своей личной папке на панель удаленного компьютера в домашней папке пользователя bob . Это значение по умолчанию. Также обратите внимание, что id_rsa.pub был переименован в pub_cert в этом процессе. Я использовал sftp чтобы показать вам, что его можно использовать точно как scp ).

Теперь мы скопируем этот сертификат в нужное место:

 bob@foo$ ssh bob@bar 

Теперь вы находитесь в личной папке bob в баре .

 bob@bar$ cat pub_cert >> .ssh/known_hosts 

(здесь вы показывали содержимое pub_cert с cat . Но вместо того, чтобы печатать его на экране, вы перенаправляете этот вывод в файл: .ssh/known_hosts . Обратите внимание, что перенаправление с > означает «заменить содержимое файла на этот поток "while >> означает" добавить поток в конец существующего файла ").

c) Результат?

Теперь вы можете scp / sftp / ssh выровнять столько, сколько хотите, не предоставляя пароль. Вы также можете автозаполнять локальные и удаленные пути с помощью клавиши [tab].

г) Как насчет моей безопасности Mac?

При таком способе вам даже не нужен сервер SSH на вашем компьютере. Только SSH-клиент (программы scp / sftp / ssh ). Это безопасно для вас, даже если бар скомпрометирован.

e) Что я сделал именно с этими ключами / сертификатами?

Сначала вы создали пару файлов: закрытый ключ и открытый сертификат. Вы можете сделать много вещей, связанных с безопасностью и аутентификацией с ними. Но в нашем случае, при справедливом упрощении, они используются следующим образом:

Когда вы пытаетесь подключиться к бару , вы будете рекламировать, что у вас есть сертификат, который вы можете использовать для подключения. bar проверит различные местоположения в системе, включая ~/.ssh/known_hosts . Он найдет сертификат, который вы рекламируете, и используйте его для отправки зашифрованных данных.

На самом деле, общедоступные сертификаты могут шифровать вещи!

Теперь это здорово, но как это можно понять? Использование личного ключа.

Частные ключи могут дешифровать материал, зашифрованный соответствующим публичным сертификатом!

Это то, что называется асимметричным шифрованием.

Затем, в основном, сервер отправит вам сложный пароль, зашифрованный вашим общедоступным сертификатом. Вы получите его, расшифруйте его своим личным ключом и начнете использовать его для шифрования данных с сервера в обоих направлениях.


Теперь, что, если вы действительно действительно хотите сделать то, что ваш путь и SCP вернулись к foo ?

Вы просто просите о неприятностях. Но чтобы смягчить эффект возможного ущерба, вы можете настроить chrooted SFTP only сервер. scp и ssh больше не будут работать, но sftp , Filezilla и прочее будут работать.

ref: https://www.allthingsdigital.nl/2013/05/12/setting-up-an-sftp-only-account-with-openssh/

Если вы посмотрите на формат файла authorized_keys , вы заметите, что вы можете ограничить допустимую команду с помощью определенного ключа. Это метод, который я ранее использовал для разрешения действия SSH с указанным ключом только для определенной команды, scp в этом случае. Посмотрите на страницу man authorized_keys используя man authorized_keys .

Вы можете посмотреть https://github.com/scponly/scponly/wiki/Download или вы можете ограничить пользователя sftp только так …

 # usermod -s /usr/libexec/openssh/sftp-server whoever 

Как и другие, я предлагаю вам прямо скопировать с вашей другой машины:

 bob@foo$ scp bar:/guest/buzz ~ 

Если по какой-либо причине вы хотите начать копирование с панели, вы можете создать ssh-keypair на foo, что позволяет foo входить в foo. Затем вы можете использовать ssh agent для передачи ключа через одно и то же соединение.

 bob@foo$ ssh -A bar password: bob@bar$ scp /guest/buzz bar: # no password prompt 

Вы также можете скопировать открытый ключ в бар, тогда не будет приглашения пароля или вы можете добавить кодовую фразу к ключу, введите его, когда ssh'ing в bar затем, из-за агента ssh, вам не понадобится он для соединения, наоборот, безопасен.

Как обсуждалось здесь: Bashrc отключает все, кроме заданной команды для данного пользователя

Вы можете настроить доступ rssh, который позволяет пользователю реализовать только данную команду и без получения доступа к оболочке.

Недостатком является то, что пользователь может по умолчанию применять эту команду к папкам вне своей системы. Это, по-видимому, можно решить с помощью chroot с некоторой работой, хотя я еще не сделал этого.

Сообщите мне, нужна ли вам какая-либо помощь, поскольку я только что установил и протестировал учетную запись rssh на моем сервере, а также изучаю это.

  • Каков наилучший способ создания удаленного туннеля?
  • ssh-add возвращает: «Ошибка подключения к агенту: нет такого файла или каталога»
  • SSH туннели заставляют новый туннель и убивают старую сессию
  • ssh_dispatch_run_fatal: неверный код аутентификации сообщения
  • ssh localhost без пароля не работает на Fedora 14
  • скрипт меню через ssh
  • В чем разница между SSH и Squid при использовании их в качестве прокси?
  • Перенос файлов с помощью scp: отказано в доступе
  • Не может SSH от моего IP, но может от других IP-адресов
  • ssh: как отключить эхо при запуске команды на пульте дистанционного управления
  • Пользовательские ограничения ограничиваются только одной папкой
  • Linux и Unix - лучшая ОС в мире.