У меня есть некоторые существующие скрипты, в которых я использую ftp +.netrc.
Я хочу переключиться на sftp сейчас, но, похоже, он не поддерживает макросы /.netrc.
Есть ли другая альтернатива?
Пожалуйста, помогите.
У меня есть некоторые существующие скрипты, в которых я использую ftp +.netrc.
Я хочу переключиться на sftp сейчас, но, похоже, он не поддерживает макросы /.netrc.
Есть ли другая альтернатива?
Пожалуйста, помогите.
Проще говоря, вы не можете использовать .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
соединения без ввода пароля или парольной фразы, вы готовы автоматизировать остальные.
является предпочтительной альтернативой, если вы конвертируете макрос .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
используя 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
используйте программу sftp
, которая разбивает стандарт SSH, позволяя хранить параметры подключения, такие как пароль. Например, используя cyberduck и AppleScript, или FileZilla и очереди.
Существует файл ~/.ssh/config
вы можете использовать, чтобы присвоить именам имен более коротких имен, задать параметры пересылки, каталоги по умолчанию, имена пользователей по умолчанию и конкретные идентификаторы для каждого хоста. Мне также нравится опция -l
scp
, которая ограничивает мою скорость передачи чем-то более разумным.
P.S. Вы могли бы подумать, что там есть инструмент для преобразования макросов .netrc
в (альтернативные 1 стиле) сценарии оболочки. Но я ничего не нашел. Это крошечная деловая возможность для бизнеса?
Если вы можете использовать аутентификацию без пароля на своем компьютере (что может быть запрещено вашим sysadmin, но обычно это не так), вы можете удобно использовать scp в оболочке script, а не в макросах в .netrc. Но если вам нужно ввести пароль для входа в удаленную машину, я бы использовал "here script" (бит с EOF в нем), чтобы сделать магию. Вы можете использовать оболочку script для приготовления ftp script, если она время от времени меняется.
Попробуйте изучить scp, так как вы можете использовать loginless (ssh keys) для этого.
Вы можете использовать те же методы с SFTP, я не уверен.