para - script sftp winscp
usando.netrc con sftp (3)
Intente buscar en scp, ya que puede usar el inicio de sesión sin contraseña (claves ssh) para hacer esto.
Es posible que pueda usar las mismas técnicas con SFTP, no estoy seguro.
Tengo algunos scripts existentes en los que estoy usando ftp + .netrc.
Quiero cambiar a sftp ahora, pero parece que no es compatible con macros / .netrc.
¿Hay otra alternativa?
Por favor ayuda.
Si puede usar la autenticación sin contraseña en su máquina (que podría estar prohibida por su administrador de sistemas, pero normalmente no lo está), entonces puede usar convenientemente scp en un script de shell en lugar de macros en .netrc. Pero si tiene que escribir una contraseña para iniciar sesión en el equipo remoto, entonces usaría el "script aquí" (el bit con EOF en él) para hacer la magia. Puede usar un script de shell para preparar el script ftp si cambia de vez en cuando.
En pocas palabras, no puedes usar .netrc
con sftp
, scp
o ssh
. Estos productos son parte del estándar OpenSSH, que tiene la palabra clave ''segura'' en el nombre. No es una práctica segura automatizar los inicios de sesión como .netrc
hace .netrc
, y el estándar prohíbe este tipo de automatización (almacenamiento de contraseñas). Definitivamente hay una alternativa, tres en realidad.
Autorización
Para cualquiera de las dos primeras alternativas, deseará configurar claves e intercambiarlas. En la máquina que está conectando desde ejecutar ssh-keygen
, para sus propósitos será mucho más simple si no le da una clave a la clave, aunque esto es arriesgado. Ahora tiene dos archivos en .ssh/
, un id_rsa
y un id_rsa.pub
. De estos, id_rsa
debe mantenerse en secreto o protegido (de ahí la id_rsa
). El archivo pub es en realidad una línea de texto. Esta línea se puede agregar al archivo ~/.ssh/authorized_keys
en el lado del host receptor. Puede agregar la clave al archivo manualmente ; pero también hay un comando de acceso directo ssh-copy-id
que hace precisamente eso, y también se encarga de los permisos de archivos. Después de haber autorizado una clave, debe poder conectarse desde la máquina con la clave privada a la máquina que tiene la clave pública autorizada, cuando se conecta como el usuario apropiado. Pruébalo con ssh -v
. Si ingresó una contraseña, se le solicitará; si no lo hiciste, ahora estás listo para la automatización. Puede usar un ssh-agent
para mantener activa una clave privada entre sesiones y solo ingresar la contraseña una vez. Si está realizando múltiples saltos de ssh
, la opción de reenviar agentes permitirá que la clave privada del ssh-agent
de la fuente original se comunique a través de cada salto. Personalmente, me parece sobreexcitado y, por lo tanto, sugiero no usar una frase de contraseña.
Ahora que puede hacer conexiones ssh
, sftp
y scp
sin ingresar ninguna contraseña o frase clave, está listo para automatizar el resto.
Alternativa 1,
es la alternativa preferida si convirtieras tu macro .netrc
en un script de shell u otro script que scp
algunos comandos scp
. Esto es similar a la automatización de todas sus conexiones ftp con curl
o wget
. P.EJ:
scp -qr $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR $LOCAL_PATH_FILE_OR_DIR #download
scp -qr $LOCAL_PATH_FILE_OR_DIR $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR #upload
scp -pqr $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR $USER@$REMOTE_HOST2:$PATH_FILE_OR_DIR #mirror between separate hosts.
ssh $USER@$REMOTE_HOST chmod 644 $PATH_FILE #set permissions
Alternativa 2,
utilizando sftp
como mencionaste, puedes crear una secuencia de comandos con el comando de expects
, con un archivo por lotes usando la opción -b
, o conectando comandos en sftp
. Esto es un poco más similar a un macro .netrc
, pero no tiene ninguna ventaja sobre la alternativa 1. .netrc
un ejemplo de este último:
#!/bin/sh
echo "OK, starting now..."
sftp -b /dev/fd/0 remotehost <<EOF
cd pub
ascii
get filename.txt
bye
EOF
Alternativa 3,
utilice un programa sftp
que rompa el estándar SSH al permitirle almacenar parámetros de conexión como la contraseña. Por ejemplo, usando cyberduck y AppleScript, o FileZilla y una cola.
Notas adicionales:
Hay un archivo ~/.ssh/config
que puede usar para dar a los nombres de host nombres más cortos, establecer parámetros de reenvío, directorios predeterminados, nombres de usuario predeterminados e identidades específicas para cada host. También me gusta la opción -l
de scp
que limita mi tasa de transferencia a algo más razonable.
PD. Usted pensaría que hay una herramienta para convertir macros .netrc
a scripts de shell (estilo alternativo 1). Pero no encontré nada. ¿Es una pequeña oportunidad de negocio?