Reacties
- serverfault.com/ vragen / 241588 / …
- De veilige manier is om een SSH-sleutel te genereren met ssh-keygen -t rsa -b 2048 en deze sleutel te gebruiken om log in op de externe server als alternatief kunt u " sshpash " installeren en vervolgens kunt u uw machine sshen met het volgende commando sshpass -p ' wachtwoord ' ssh gebruikersnaam @ servernaam
- De vraag waarnaar wordt doorgestuurd is niet dezelfde als deze. Deze vraagt om een manier om een interactieve sessie te starten.
Answer
Installeer op Ubuntu de sshpass
pakket, gebruik het dan als volgt:
sshpass -p "YourPassword" ssh user@host
sshpass
ondersteunt ook het doorgeven van het toetsenbord-interactieve wachtwoord vanuit een bestand of een omgevingsvariabele, wat een geschiktere optie kan zijn in elke situatie waarin beveiliging relevant is. Zie man sshpass
voor de details.
Opmerkingen
- Hoewel het niet wordt aanbevolen en geen goede gewoonte is, is dit precies het antwoord op de vraag. Overweeg om sleutels te gebruiken zoals hierboven vermeld. Maar als er ' s een belangrijk technisch probleem is, is dit de oplossing die wordt gevraagd.
- Ik stem alleen voor het antwoord. Niet " rationeel waarom niet ' je het op deze manier doet in plaats van " antwoorden. Gewoon het antwoord. daarom heb ik je positief gestemd 🙂
- Ik heb ' t geen hekel aan sshpass, in feite ' gebruik ik het op tijdelijke basis. Het gebruik van ' -p ' is echter niet nodig en ongewenst. Stel eerst de variabele SSHPASS in en doe vervolgens sshpass -e ssh < ssh-args >.
- @Brad If je hebt root in de box, je kunt
sshpass
installeren metyum --enablerepo=epel install sshpass
. - Dit antwoord werkt ook op Manjaro ( Arch-based).
Answer
Als uw alternatief is om een wachtwoord in een script te zetten of ssh
opdrachtregel of bestand met platte tekst, dan “re VEEL beter af met een ssh
-sleutel. Hoe dan ook, iedereen die toegang heeft tot het account waar het ssh
clientscript is opgeslagen zou dat kunnen gebruiken om in de server te komen, maar in het geval van een ssh
-sleutel, ondersteunt OpenSSH het correct, je verleent geen toegang op andere manieren dan ssh
, het kan gemakkelijker worden ingetrokken indien nodig, enz …
Je zult moeten uitleggen waarom je een vereiste hebt om geen ssh-sleutel te gebruiken.
Overweeg ook om een geforceerd commando te gebruiken (command="..."
in de .ssh/authorized_keys
-bestand), zodat de client alleen toegang heeft om het commando uit te voeren dat hij nodig heeft op de server in plaats van een volledige shell.
Opmerkingen
- De externe host is eigenlijk een VM die wordt gebruikt door andere technici zonder andere middelen dan kopieën van testautomatiseringscode. Laten we voor de discussie zeggen dat de enige toegang die ik heb is om het scriptbestand toe te voegen en niet om ssh-sleutels toe te voegen in
~/.ssh/
. - Dat ' s zeer gekunsteld. Een wat minder gekunsteld scenario zou zijn dat een misleide beheerder van de server ssh key logins uitschakelde (
PubkeyAuthentication no
in/etc/ssh/sshd_config
). In beide gevallen is de betere oplossing om het onderliggende probleem op te lossen waardoor u geen SSH-sleutelaanmeldingen kunt uitvoeren. Als dat niet lukt, raadpleeg dan de vraag waarnaar Gilles verwijst . - @MichaelM hoef je geen ssh-sleutels toe te voegen in
~/.ssh/
. Voeg de sleutel toe waar u maar wilt en gebruikssh -i /path/to/id_rsa
- Stackexchanges-antwoord zou de vraag moeten beantwoorden, niet als argument dat de vraag juist is. Ik heb hiervoor een geldig scenario. Ik moet mijn
~/.ssh/authorized_keys
in 95 verschillende vakken instellen. Ik heb een script geschreven om mijn Authorized_keys-bestand automatisch te pushen, maar ik vraag nog steeds om een wachtwoord. Het zou fijner zijn om het script één keer om het wachtwoord te laten vragen. - Ik ben het eens met flarn2006.Je kunt niet " zeggen, deze vraag is stom, dus hier is ' een antwoord op een andere vraag omdat ik denk dat het ' is een betere vraag en ik weet het antwoord erop ".
Antwoord
Ten eerste raad ik, net als de andere respondenten, aan om ssh-sleutels te gebruiken. Maar ik ga ervan uit dat de persoon die de server beheert, je simpelweg niet toestaat ssh-sleutelverificatie te gebruiken en dat je wachtwoordverificatie moet gebruiken.
Je kunt ControlMaster en ControlPath gebruiken.
Laat A de server zijn waar je geen toegang toe hebt (denk aan een continue integratieserver zoals Bamboo) en C de externe host waarop Ubuntu draait.
Laat B nu een computer zijn die je bestuurt. Als je kunt Als u geen geschikte B-computer biedt, zal dit antwoord niet werken.
- Maak een sleutelpaar en voeg het openbare gedeelte toe aan Bs geautoriseerde_sleutelsbestand. Geef A de privésleutel. Nu kun je zonder wachtwoord inloggen op B vanaf A.
- Op B handmatig
ssh -M -S /tmp/controlpath C
en voer je wachtwoord in bij de prompt. Daarna zou je in staat moeten zijn om vanuit A in te loggen op C zonder een wachtwoordssh -S /tmp/controlpath C
.
In het script op A kun je ssh B ssh C dostuff
.
Elke keer dat u B herstart, moet u de verbinding ssh -M -S /tmp/controlpath C
herstellen.