¿Cómo se crea un directorio en el host remoto si no existe sin ssh-ción de?
Pregunta
No estoy seguro si esto es posible o no. Básicamente, estoy escribiendo un guión que me permite SCP un archivo a mi alojamiento. Esto es hasta ahora. Argumento 1 es el archivo y el argumento 2 es la carpeta que quiero que sea colocado en el servidor remoto:
function upload {
scp $1 myusername@ssh.myhost.net:$2
}
Como se puede / no puede saber, si el directorio especifico cuando llamo a la función no existe, entonces la transferencia falla. ¿Hay una manera de comprobar si el directorio existe en la función y si no es así, crear.
Yo preferiría no tener que ssh en todo tiempo y crear el directorio, pero si tengo otra opción, entonces tengo otra opción.
Solución
Puede utilizar rsync.
Por ejemplo,
rsync -ave ssh fileToCopy ssh.myhost.net:/some/nonExisting/dirToCopyTO
Nota sobre rsync:
rsync es un software de utilidad y el protocolo de red para Unix que sincroniza los archivos y directorios de un lugar a otro y reducir al mínimo la transferencia de datos mediante el uso de codificación delta en su caso utilizando el algoritmo rsync que es más rápido que otras herramientas.
Otros consejos
Asumo que decir que no desea iniciar sesión de forma interactiva y crear directorios a mano, en lugar de que desea evitar el uso de ssh
por completo, ya que todavía necesita una contraseña o clave pública con scp
.
Si se utiliza ssh no interactiva es aceptable, entonces se puede transmitir su archivo usando cat
sobre ssh
:
cat $1 | ssh $2 "mkdir $3;cat >> $3/$1"
donde
$1 = filename
$2 = user@server
$3 = dir_on_server
Si el directorio ya existe, mkdir
se queja, pero aún así el archivo se copia. El directorio existente no se sobrescribe. Si no existe el directorio, mkdir
lo creará.
Si lo hace un SCP recursiva (-r), copiará directorios también. Así que si se crea un directorio del nombre que desee en el host remoto a nivel local, copiar el archivo en él, y luego copiar de forma recursiva, el directorio se creará, con el archivo en él.
Un poco torpe, pero sería hacer el trabajo.
Este es un proceso de dos pasos
ssh myusername@ssh.myhost.net "mkdir -p $2"
Se crea Esto asegura estructura de directorios. A continuación, se copia
scp $1 myusername@ssh.myhost.net:$2
¿Qué tal, por ejemplo, España
ssh remote_user@remote.host '[ -d /tmp/nonexist/dir ] || mkdir -p /tmp/nonexist/dir ]'; scp test.txt remote_user@remote.host:/tmp/nonexist/dir
sshfs
ser de lujo!
Ejemplo .ssh/config
Host your-host
HostHame example.com
User name
IdentitiesOnly yes
IdentityFile ~/.ssh/private_key
Configuración local a un lado desde arriba sólo requiere un target punto de montaje ...
sudo mkdir /media/your-host
sudo chown ${USER}:${USER} /media/your-host
... después de lo cual las cosas como el montaje y des-montaje son mucho más simple de la escritura.
Monte
sshfs your-host:within-home/some-dir /media/your-host
Desactivar
fusermount -u /media/your-host
La mejor parte de este enfoque, cuando un servidor lo permite, es que los scripts se ejecutan localmente pueden interactuar con el sistema de archivos remoto. Lo que significa que cosas como ...
if ! [ -d "/media/your-host/nowhere" ]; then
mkdir -vp "/media/your-host/nowhere"
fi
... a ser posible entre muchos otros trucos que pueden ser preformados a través de este tipo de magia de montaje.