Wykonaj scp-then-ssh w jednym połączeniu

0

Zarówno w pracy, jak i w domu często wykonuję następujące czynności:

$ scp "SomeScriptIJustCreatedOrModified.sh" some-server:
$ ssh some-server ./SomeScriptIJustCreatedOrModified.sh arguments

A czasem też ta odmiana:

$ scp "SomeScriptIJustCreatedOrModified.sh" some-server:/tmp
$ ssh some-server -t sudo -u other_user /tmp/SomeScriptIJustCreatedOrModified.sh arguments

Chodzi o to, że serwer często znajduje się w innym kraju, a uzgadnianie SSH zwykle zajmuje co najmniej kilka sekund --- i ten pozorny krótki czas oczekiwania może szybko się zestarzeć, a także przeszkodzić w tworzeniu długich list serwerów. Co więcej, byłem wcześniej krytykowany za tworzenie podejrzanie szybkich kolejnych połączeń SSH.

Jak to osiągnąć?

Ekevoo
źródło
Zrób alias w swoim .bashrc?
Adam
@Adam jedno połączenie, a nie jedno polecenie.
Ekevoo,
2
Spójrz na użycie controlmaster, otwiera jedno połączenie z serwerem i podczas gdy to połączenie jest otwarte, wszystkie przyszłe połączenia ssh lub scp używają tego samego połączenia i nie wymagają podawania poświadczeń. puppetlabs.com/blog/speed-up-ssh-by-reusing-connections
Adam
Mój plik .ssh / config wygląda następująco: pastebin.com/8SHV8g3k
Adam
Dlaczego po prostu nie jesteś zalogowany na zdalnym serwerze zamiast nawiązywać połączenie za każdym razem?
jjlin

Odpowiedzi:

2

Spróbuj spojrzeć na controlmaster. Otwiera pojedyncze połączenie ssh i umożliwia przyszłym połączeniom ssh i scp przechodzenie przez to samo połączenie, więc nie trzeba ponownie podawać hasła ani czekać na otwarcie połączenia.

Oto przykład konfiguracjicontrolmaster .

Edytuj .ssh/configplik, aby uwzględnić linie:

Host hostname                                                                                                          
    User username                                                                                                  
    HostName hostname                                                                                                        
    ControlMaster auto
    ControlPath ~/.ssh/%r@%h:%p

Gdzie hostnamei usernamesą zastępowane odpowiednimi informacjami.

Adam
źródło
0

Jeśli masz dostęp do ssh na serwerze, zawsze możesz użyć klienta sftp, takiego jak ExpanDrive, aby zamontować zdalny katalog domowy na komputerze lokalnym. Następnie możesz po prostu napisać skrypt lokalnie w edytorze tekstu i zapisać go na lokalnym komputerze zdalnym.

W tym momencie będzie na serwerze, a wszystko, co musisz zrobić, to ssh i uruchomić go. Dopóki utrzymujesz otwarte połączenia sftp i ssh, możesz zapisywać i uruchamiać tyle skryptów, ile chcesz, przez cały dzień, a będziesz musiał połączyć się tylko raz dla sftp i raz dla ssh.

Pamiętaj tylko, że przy takim przepływie pracy za każdym razem, gdy zapiszesz, będziesz pisać na zdalnym serwerze, a on będzie pisał tak szybko, jak pozwalają na to ograniczenia systemu operacyjnego i sieci (tj. Będzie wolniejszy niż zapis lokalny).

wbr
źródło
Dzięki, ale to dobre rozwiązanie tylko dla scenariusza z jednym serwerem.
Ekevoo
Możesz połączyć się z wieloma serwerami jednocześnie w Expandrive. W przypadku ssh możesz użyć ekranu lub kart w terminalu, aby otworzyć wiele połączeń jednocześnie.
wbr