Использование .netrc с sftp

У меня есть некоторые существующие скрипты, в которых я использую ftp +.netrc.

Я хочу переключиться на sftp сейчас, но, похоже, он не поддерживает макросы /.netrc.

Есть ли другая альтернатива?

Пожалуйста, помогите.

Ответы

Ответ 1

Проще говоря, вы не можете использовать .netrc с sftp, scp или ssh. Эти продукты являются частью стандарта OpenSSH, который имеет ключевое слово "secure" в названии. Это не безопасная практика для автоматизации входа в систему, как это делает .netrc, и стандарт запрещает такую ​​автоматизацию (хранение паролей). Существует определенно альтернатива, три на самом деле.

Авторизация

Для любого из первых двух альтернатив вам нужно будет установить ключи и обменять их. На компьютере, с которого вы подключаетесь, выполните ssh-keygen, для ваших целей это будет намного проще, если вы не дадите ключ парольной фразе, хотя это рискованно. Теперь у вас есть два файла в .ssh/, id_rsa и id_rsa.pub. Из них id_rsa должен храниться в секрете или защищен (отсюда и фраза). Файл pub фактически представляет собой одну строку текста. Эта одна строка может быть добавлена ​​в файл ~/.ssh/authorized_keys на принимающей стороне хоста. Вы можете добавить ключ к файлу вручную; но есть также команда ssh-copy-id shortcut, которая делает именно это, также заботясь о разрешениях файлов. Разрешив ключ, вы должны иметь возможность подключиться к аппарату с закрытым ключом к машине, которая имеет авторизованный открытый ключ, когда вы подключаетесь как соответствующий пользователь. Протестируйте его с помощью ssh -v. Если вы введете пароль, вам будет предложено его; если вы этого не сделали, теперь вы готовы к автоматизации. Вы можете использовать ssh-agent, чтобы сохранить закрытый ключ активным между сеансами, только однажды вводив парольную фразу. Если вы делаете несколько переходов ssh, опция переадресации агентов позволяет передавать приватный ключ из исходного исходного кода ssh-agent через каждый прыжок. Лично я нахожу это перегруженным и, следовательно, предлагаю не использовать профайлу.

Теперь, когда вы можете сделать ssh, sftp и scp соединения без ввода пароля или парольной фразы, вы готовы автоматизировать остальные.

Альтернатива 1,

является предпочтительной альтернативой, если вы конвертируете макрос .netrc в оболочку script или другой script, вызывающий несколько команд scp. Это похоже на автоматизацию всех ваших соединений ftp с помощью curl или wget. Например:.

scp -qr [email protected]$REMOTE_HOST:$PATH_FILE_OR_DIR $LOCAL_PATH_FILE_OR_DIR #download
scp -qr $LOCAL_PATH_FILE_OR_DIR [email protected]$REMOTE_HOST:$PATH_FILE_OR_DIR #upload
scp -pqr [email protected]$REMOTE_HOST:$PATH_FILE_OR_DIR [email protected]$REMOTE_HOST2:$PATH_FILE_OR_DIR #mirror between separate hosts.
ssh [email protected]$REMOTE_HOST chmod 644 $PATH_FILE #set permissions

Альтернатива 2,

используя sftp, как вы упомянули, вы можете script его с помощью команды expects с пакетный файл с помощью параметра -b или путем соединения команд в sftp. Это немного больше похоже на макрос .netrc, но не имеет преимущества перед альтернативой 1. Я покажу пример последнего:

#!/bin/sh
echo "OK, starting now..."
sftp -b /dev/fd/0 remotehost <<EOF
cd pub
ascii
get filename.txt
bye
EOF

Альтернатива 3,

используйте программу sftp, которая разбивает стандарт SSH, позволяя хранить параметры подключения, такие как пароль. Например, используя cyberduck и AppleScript, или FileZilla и очереди.

Дальнейшие примечания:

Существует файл ~/.ssh/config вы можете использовать, чтобы присвоить именам имен более коротких имен, задать параметры пересылки, каталоги по умолчанию, имена пользователей по умолчанию и конкретные идентификаторы для каждого хоста. Мне также нравится опция -l scp, которая ограничивает мою скорость передачи чем-то более разумным.

P.S. Вы могли бы подумать, что там есть инструмент для преобразования макросов .netrc в (альтернативные 1 стиле) сценарии оболочки. Но я ничего не нашел. Это крошечная деловая возможность для бизнеса?

Ответ 2

Если вы можете использовать аутентификацию без пароля на своем компьютере (что может быть запрещено вашим sysadmin, но обычно это не так), вы можете удобно использовать scp в оболочке script, а не в макросах в .netrc. Но если вам нужно ввести пароль для входа в удаленную машину, я бы использовал "here script" (бит с EOF в нем), чтобы сделать магию. Вы можете использовать оболочку script для приготовления ftp script, если она время от времени меняется.

Ответ 3

Попробуйте изучить scp, так как вы можете использовать loginless (ssh keys) для этого.

Вы можете использовать те же методы с SFTP, я не уверен.