Аутентификация на основе ключей с помощью net-sftp в Ruby - PullRequest
6 голосов
/ 09 ноября 2009

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

Моя первая попытка выглядит примерно так:

def download(files_to_download, destination_directory)
    Net::SFTP.start(@server, @username, :password => @password) do |sftp|
        files_to_download.each do |f|
            local_path = File.join(destination_directory, File.basename(f))
            sftp.download!(f, local_path)
        end
    end
end

Хотя это работает, это значит, что нам нужен пароль. В идеале я хочу использовать аутентификацию с открытым ключом, однако не могу найти ссылки на это в документации или в Интернете - возможно ли это?

Я бы предпочел не использовать чилкат.

Спасибо

Ответы [ 2 ]

11 голосов
/ 24 сентября 2014

Если вы хотите напрямую указать ключ (или другие параметры SSH ), вы можете сначала открыть соединение Net :: SSH , а затем выполнить операции SFTP оттуда.

Net::SSH.start("localhost", "user", keys: ['keys/my_key']) do |ssh|
  ssh.sftp.upload!("/local/file.tgz", "/remote/file.tgz")
  ssh.exec! "cd /some/path && tar xf /remote/file.tgz && rm /remote/file.tgz"
end

Это также работает для Net :: SCP

Net::SSH.start('localhost', 'user', keys: ['keys/my_key'] ) do |ssh|
  ssh.scp.download("/local/file.txt", "/remote/file.txt")
end
7 голосов
/ 09 ноября 2009

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

Подключение с использованием открытых / закрытых ключей

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

...