Si realmente desea hacerlo sin modificaciones en el lado del servidor, ya sea:
1) Ejecuta algo como
$ ssh user@host -t 'bash -l -o vi'
No creo que la documentación sea demasiado clara al respecto, pero -o option
se menciona y parece funcionar.
2) Utilice esperar:
El expect
guión:
$ cat bashsetup.expect
#!/usr/bin/expect -f
set user [lindex $argv 0];
set host [lindex $argv 1];
spawn ssh -l $user $host
expect "$ "
send "set -o vi\n"
interact
Hazlo ejecutable y ejecuta:
$ ./bashsetup.expect user testhost
spawn ssh -l user testhost
[motd, blahblah...]
user@testhost ~$ set -o vi
user@testhost ~$
Esto supone que puede iniciar sesión sin ingresar contraseñas (para el host remoto o para sus claves), de lo contrario, el script esperado debería tener eso en cuenta. Pero con muchas máquinas es probable que ya tenga eso. Además, esperaba un signo de dólar y un espacio, edítelo según su solicitud: "# "
tal vez.
Aunque si algo impreso antes del aviso incluye esos mismos caracteres, deberá incluir algo más específico en la cadena esperada.
Además, ese script no admite dar argumentos adicionales a ssh
. Si va a dar un comando explícito para ejecutarse, probablemente no necesite el modo vi, pero si necesita decir túnel de puerto, eso podría ser un problema.
Pero en cualquier caso, realmente creo que esto debería resolverse en los sistemas de destino con cuentas separadas ( sudo
o simplemente UID 0 antiguo). La configuración personalizada también sería útil para muchos otros casos, y en general tendría un montón de archivos de configuración y variables de entorno que le gustaría establecer. (Tenga en cuenta que los administradores podrían no estar de acuerdo con el valor $EDITOR
o el contenido de virc
lo que sea).
También eliminar usuarios sería más fácil con cuentas separadas.
Cualquier forma de sincronizar archivos en todos los hosts también resolvería trivialmente esto al permitirle iniciar sesión con algo como ssh -t user@host 'patricks_shell.sh'
o ssh -t user@host 'bash --rcfile patrick.rc'
.
set -o vi
antes de darme el control del caparazón.set -o vi
comando y luego cambiar al modo interactivo.sshd
configura varias variables de entorno que pueden ayudarlo a determinar quién está en el otro extremo. Por ejemplo,SSH_CLIENT
contiene la dirección IP de conexión (y el puerto de salida / entrada del cliente también). Jugar con esto~/.bashrc
podría permitirte hacer cosas solo por ti .