Используя SCP или SFTP с моим конфигурационным файлом ssh?

44

Возможно, мой google-foo подводит меня здесь ... Я хотел бы подключиться и загрузить файл дампа mysql через терминал, используя SFTP или SCP, на мой удаленный сервер, используя мой файл конфигурации ssh. Согласно документации, которую я нашел, я должен быть в состоянии сделать это:

sftp -F db.sql.gz webost@staging2.example.com /tmp

Я также устал от псевдонима в моей конфигурации:

sftp -F db.sql.gz myalias /tmp

Когда я делаю два выше, я просто получаю распечатку возможных команд, -Fявляясь одной из них.

Я уже могу подключиться через SSH с помощью ярлыка в моей локальной конфигурации просто отлично, поэтому я знаю, что работает:

ssh myalias

** Примечание: я подключаюсь, используя пару секретный / открытый ключ, поэтому мне никогда не нужно вводить пароль. С парой ключей действительно связана парольная фраза, но OS X Keychain помнил, что при первом подключении.

... так что я не уверен, что я делаю неправильно.

Дэнни Энгландер
источник

Ответы:

46
  1. Из справки: « ... [-F ssh_config] ...»

    Согласно вышесказанному, -Fожидается один аргумент: путь к файлу конфигурации OpenSSH ~/.ssh/configили аналогичный. Но вместо этого вы даете ему сжатый дамп SQL.

    Поскольку plain ssh myaliasуже работает, вам даже не нужна эта -Fопция. Просто sftp myaliasбы подключиться к серверу.

  2. Однако sftpклиент OpenSSH не поддерживает загрузку файлов, как вы пытаетесь; он может загружать только файлы (используя синтаксис host:path) или работать в интерактивном режиме. Для загрузки вам необходимо использовать либо интерактивный режим ...

    $ sftp myalias
    sftp> cd /tmp
    sftp> put db.sql.gz
    

    ... или scpинструмент:

    scp db.sql.gz myalias:/tmp
    

    или

    scp db.sql.gz webost@staging2.example.com:/tmp
    

(У sftp есть пакетный режим, в котором он может читать команды из файла, используя его -b, но его проще использовать scpдля одиночной загрузки.)

Есть и другие SFTP-клиенты - lftp хорош для интерактивного использования, в то время как curl проще автоматизировать. Для резервного копирования и тому подобного вы также можете использовать rsync (который запускает собственный протокол, но все еще внутри SSH).

grawity
источник
вау это отлично, отлично сработало! Я только знакомлюсь с терминалом, так что это действительно пригодится в будущем.
Дэнни Энгландер
0

Проблема, вызванная конфигурацией ForwardAgent, как показано ниже,

Host dockervm
   HostName x.x.x.x
   User root
   Preferredauthentications publickey
   ForwardAgent yes

В моем случае это произошло из-за 'ForwardAgent' в конфигурации ssh, который вызвал зависание scp. Однажды комментируя это, сработало для меня.

Кроме того, вы можете получить копию файла с закомментированной строкой ForwardAgent и использовать scp -F для его работы.

MohanBabu
источник