Uruchom zdalne polecenie, używając pliku konfiguracyjnego ssh

32

Chciałbym móc skonfigurować polecenie, aby uruchamiało się przy logowaniu ssh na serwerze, bez konieczności jego wpisywania. Zasadniczo szukam pliku konfiguracyjnego ssh odpowiadającego:

ssh host command

więc wszystko, co muszę wpisać to:

ssh host

i polecenie zostaje uruchomione.

PeterJCLaw
źródło

Odpowiedzi:

16

Możliwe jest również wstawienie polecenia do pliku autoryzowanych kluczy. ( ~/.ssh/authorized_keys). Umożliwia to wykonanie niestandardowego polecenia dla każdego klawisza w pliku. Używam tego do przekazywania połączeń powłoki przez moją zaporę ogniową. W rezultacie mogę ssh do jednego hosta i automatycznie łączy on sesję z hostem w sieci. authorized_keysWpis wygląda następująco:

command="ssh -Tq <hostname> \"$SSH_ORIGINAL_COMMAND\"",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA... the rest of the key ...

Mówiąc dokładniej, przekierowanie dotyczy mojej instancji gitolite. Umożliwia to prosty dostęp z zewnątrz bez bezpośredniego narażania hosta gitolite na dostęp z zewnątrz. Sprawdź stronę podręcznika, aby uzyskać więcej informacji. ( http://linux.die.net/man/8/sshd )

dav
źródło
1
To jest niesamowite, nie wiedziałem, że możesz to zrobić. +1
Brian Wigginton
3
Jeśli umieścisz polecenie w pliku uprawnionych kluczy, spowoduje to uszkodzenie takich rzeczy, jak rsync i scp - otrzymasz coś takiego: otwarty terminal nie powiódł się: nie terminal. Pamiętaj też, że jeśli polecenie się nie powiedzie, nie będziesz mógł się zalogować. Odkryłem to na własnej skórze.
John Hunt
11

Jeśli używasz OpenSSH, wygląda na to ~/.ssh/rc jest wykonywany po zalogowaniu .

coneslayer
źródło
3
Czy /.ssh/rcznajduje się na komputerze klienta lub serwera? Wygląda jak z dokumentacji serwera, prawda?
heavyd
1
Tak, byłoby to na serwerze.
coneslayer
Niestety rcwydaje się, że plik nie uruchamia się, np. Pojawia screensię błąd „Musi być podłączony do terminala”
davidparks21
10

Możesz ustawić alias bash.

W pliku .bashrc umieść:

alias ssl='ssh some_host run_command'

Wtedy nie musiałbyś nawet wpisywać nazwy hosta.

Lub jeśli chcesz to zrobić na wielu hostach (i wiele aliasów nie działa), użyj małego skryptu:

kevin@box:~$ cat ssl.sh
#!/bin/sh
ssh $1 some_command
kevin@box:~$
Kevin M.
źródło
2

Na zimno rozwiązujesz to w swoim .ssh/config file, dla hosta, na którym chcesz wykonać polecenie, dodaj

  RequestTTY yes
  RemoteCommand <some command>

gdzie <some command>jest twoje polecenie Działa to również z screenem lub tmux.

Florian Lautenschlager
źródło