Ответ 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 стиле) сценарии оболочки. Но я ничего не нашел. Это крошечная деловая возможность для бизнеса?