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.

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 )


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 .


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:~$

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.