Salut,
pour mon travail, je suis amené à utiliser openSSH à outrance et à travailler beaucoup sur des serveurs distants.
Est-ce que c'est possible que vous me disiez si vous avez des trucs et astuces pour utiliser ssh sur un serveur distant. Pour l'instant, je suis seulement en ligne de commande, mais je me demande des choses à propos de GNU screen par exemple, que je n'ai jamais utilisé, ou encore de navigateurs de fichiers à travers ssh, ou des commandes pratiques.
Pour l'instant, j'en suis resté au couple ssh/scp, mais ce n'est pas ce qu'il y a deplus ergonomique.
Merci beaucoup pour vos conseils.
# autossh + screen
Posté par aurel (site web personnel, Mastodon) . Évalué à 3.
autossh -t machine screen -DR
Après, le reste, ce sont les outils en ligne de commande tels que tu les connais sans doute déjà. Pense à regarder du coté de man ssh_config et man screen, c'est d'une richesse insoupçonnée :)
[^] # Re: autossh + screen
Posté par NeoX . Évalué à 3.
screen -RdS un-nom
il faut faire ctrl+a ctrl+d pour se detacher de ce terminal et laisser le screen tourner en tache de fond.
pour s'y reconnecter (via le nom mis plus haut):
screen -RdS un-nom
[^] # Re: autossh + screen
Posté par 태 (site web personnel) . Évalué à 3.
Host *
ControlPath ~/.ssh/master-%r@%h:%p
ControlMaster auto
me permet quand j'ai une session ssh ouverte de la réutiliser si je fais un autre ssh ou scp sur la même machine (d'où gros gain de vitesse y compris sur la complétion).
Sinon, ssh-agent est indispensable (de concert avec ssh-keygen, ssh-copy-id et enfin ssh-add)
Et enfin, les Escape Characters (en particulier ~C qui donne la possibilité d'ouvrir des tunnels à la volée).
# diverses facons de gerer les fichiers
Posté par NeoX . Évalué à 2.
scp mon_fichier_local user@machine:/chemin/vers/fichier
tu peux evidemment ramener un fichier qui se trouve sur ton serveur en inversant la source et le serveur ( scp user@machine:/chemin/vers/fichier mon_fichier_local )
rsync -a --progress SOURCE DESTINATION
pour rsync source et destination peuvent etre des fichiers locaux, des dossiers, ou des serveurs ssh
sshfs user@machine:/chemin/vers/dossier dossier_de_montage
qui va activer le "dossier" de ton serveur
dans le "dossier_de_montage" de ta machine locale
en interface graphique :
nautilus inclus un couche sshfs dans ses menus permettant de creer et monter des dossiers distants en local
filezilla (et probablement d'autre logiciels FTP) savent gerer le SFTP qui est en fait FTP sur SSH (et donc via le port 22)
# Clef, Konqueror
Posté par Mathias Bavay (site web personnel) . Évalué à 3.
Après, pour ce qui est de transférer des fichiers, j'utilise parfois konqueror via son support de sftp (donc on se balade comme dans un système de fichier local). J'ai quelques liens ssh dans mes bookmarks, donc un seul clic et je suis dessus.
Mathias
# Midnight commander
Posté par wismerhill . Évalué à 3.
À mon avis c'est un incontournable!
# NX - !M - No Machine
Posté par Benoit . Évalué à 2.
Pour plus d'info, voir le site de la société (http://www.nomachine.com/), mais surtout le site de l'implémentation libre (http://freenx.berlios.de/).
# ssh : bien plus qu'un telnet crypté
Posté par nodens . Évalué à 1.
Ca permet de faire plein de trucs sympa, comme un tar à la volée de données distantes :
ssh user@monserver "tar cf - /mondossier" > mondossier.tar
Pratique si on n'a pas rsync, et qu'on veut conserver les attributs des fichiers par exemple :
ssh user@monserver "cd /mon/chemin ; tar cf - mondossier" | tar xvf -
Encore plus fort, d'un serveur à un autre en passant par la machine locale :
ssh user@monserver "cd /mon/chemin ; tar cf - mondossier" | ssh user@monserver2 "cd /mon/chemin2; tar xvf - "
Ca marche avec n'importe quoi, on peut exécuter une commande sur un hôte et nourrir une boucle sur un autre, la puissance du shell à travers le réseau, comme avec netcat mais chiffré et authentifié. Evidemment il faut faire attention à l'échappement des caractères, et au fait qu'une variable valide localement ne l'est pas sur le serveur (ou pire, pourrait avoir une valeur différente).
On peut même faire du "rebond" à peu de frais :
ssh -A -t user@srv1 ssh -A user@srv2
(le -A sert pour la propagation de l'agent, attention à ne faire que sur des hôtes de confiance... Et le -t pour forcer l'allocation d'un pseudo-terminal même si on lance une commande non-interactive, sans ça impossible de lancer une session interactive dans le rebond).
Un dernier truc bon à savoir : les variables d'environnement SSH_CLIENT et SSH_CONNECTION contiennent respectivement l'ip source, le port source et le port destination, et l'ip source, le port source, l'adresse de destination et le port de destination. Ca peut servir.
Allez encore quelques-un, rapide, pour la route :
- Les shells qui ont une completion évoluée peuvent souvent faire de la completion de nom de fichier à travers scp si on a une clef pour se connecter au serveur et un agent,
- lftp supporte sftp, il suffit d'utiliser sftp://
- si on a un domaine kerberos (ou quelque chose qui y ressemble, comme un active directory), et que c'est le moyen d'authentification, on peut faire du single sign-on en autorisant l'authentification GSSAPI (côté serveur et côté client)
- les clefs sont hashée par défaut (sous debian en tout cas) dans le .ssh/known_host, pour éviter de se faire voler la liste des hôtes auquel on se connecte. Pour faire de la completion sur les noms d'hôte (si on n'a pas peur de se faire voler ce fichier), on peut utiliser le format en clair avec "HashKnownHosts no" dans son .ssh/config.
- pour supprimer un hôte de son known_hosts quand il est hashé, il suffit d'utiliser ssh-keygen -r <hôte>
- si on utilise un agent (par exemple celui inclus par gnome...), il est préférable de s'assurer que les phrases de passe sont oubliées quand on verrouille la session.
Si on utilise xscreensaver, on peut faire ça simplement avec un script perl à lancer à l'ouverture de session :
#!/usr/bin/perl
# unload identity when screen is locked
# put your favourite graphical ssh-askpass here, unless you use SSH_ASKPASS
# environment variable
my $ssh_askpass = "/usr/lib/openssh/gnome-ssh-askpass";
$ENV{SSH_ASKPASS} = "$ssh_askpass" unless ($ENV{SSH_ASKPASS});
my $locked;
open (IN, "xscreensaver-command -watch |");
while () {
if (m/^LOCK/) {
system("ssh-add -d") if (! $locked);
$locked = 1;
} elsif (m/^UNBLANK/) {
system("ssh-add < /dev/null") if ($locked);
$locked = 0;
}
}
Si on utilise gnome, remplacer xscreensaver-command par gnome-screensaver-command.
Amuse-toi bien :-)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.