Bash : SSH Skript mit eigener known_hosts

Problem : Wir arbeiten hier auf einem Server mit mehreren Usern, es kommt immer wieder vor das jemand die known_hosts überschreibt. Den Schuldigen haben wir noch nicht gefunden ;-) Also verwenden wir jetzt in unseren Skripts eigene known_hosts files.

Lösung :
Ich habe mir angewöhnt im Skript Ordner einen Ordner ssh anzulegen in dem dann die known_hosts liegt.
Somit bin ich unabhängig von anderen.
Setzen einer Variable im Skript
SSH_KNOWN_HOST="-o ConnectTimeout=30 -o UserKnownHostsFile=$(dirname $(readlink -f ${0}))/ssh/known_hosts"
Im Skript selbst kann man das so verwenden.
ssh ${SSH_KNOWN_HOST} USER@HOSTNAME
Da sftp und ssh die selben Parameter kennen kann man diese Variable beim Aufruf von ssh und sftp verwenden.

Debian 8 (Jessie) - Probleme mit ssh/sftp Übertragung

Problem : Nach einem Update auf Debian 8 bekommt ein Client keine Verbindung mehr. Im Logfile wird folgendes gelogt.
 sshd[xxx]: fatal: Unable to negotiate a key exchange method [preauth]


Lösung : manuelles hinzufügen des KexAlgorithms in der Datei /etc/ssh/sshd_config
Diesen Eintrag in die Datei /etc/ssh/sshd_config kopieren.
KexAlgorithms diffie-hellman-group1-sha1,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
Ciphers 3des-cbc,blowfish-cbc,aes128-cbc,aes128-ctr,aes256-ctr
danach die Schlüssel neu generieren.
ssh-keygen -A
Jetzt starten wir noch den Dienst neu damit er alle Einstellungen mitbekommt.
service ssh restart
Nach diesen Änderungen konnte unser Kunde wieder wie gewohnt übertragen.

Kleine Anmerkung von mir es hat einen Grund warum veraltet Ciphers rausgeworfen werden.

SSH Login mit authorized_keys (ohne Passwort )

Problem : Man möchte mit einem Bash Script (Server A) z.B. Sicherungen von einem entfernten Server (Server B) automatisiert abholen. Da hier die Eingabe eines Passwortes hinderlich ist realisiert man das über einen SSH Key.

Lösung :

1.) erstellen eines SSH Keys auf Server A mit dem Befehl
ssh-keygen -t rsa


2.) erstellen des Ordners .ssh im Homeverzeichnis auf Server B, sollte dieser bereits existieren auch gut :-)
mkdir -p ~/.ssh


3.) importieren des erstellten Keys von Server A in der Datei .ssh/authorized_keys auf Server B
cat ~/.ssh/id_rsa.pub | ssh user@[Hostname von Server B] 'cat >> .ssh/authorized_keys'
oder
cat ~/.ssh/id_rsa.pub | ssh user@[IP-Adresse von Server B] 'cat >> .ssh/authorized_keys'


Anmerkung: Man kann auch Schritt 2 und 3 in einem zusammenfassen. Das gute daran man muss sich nicht erst auf Server B anmelden ;-)
cat ~/.ssh/id_rsa.pub | ssh root@[Hostname von Server B] 'mkdir -p ~/.ssh ; cat >> .ssh/authorized_keys'



4.) testen des Zugangs ohne Passwort z.B. mit diesem Befehl von Server A aus
ssh user@hostname
oder
ssh user@ip-adresse
“Wenn du dir die Anwender deiner Programme als Idioten vorstellst, werden auch nur Idioten deine Programme verwenden.”
Linus Torvalds