Vraag De schaal kiezen die SSH gebruikt?


Hoe stel ik de shell in die wordt gebruikt wanneer een gebruiker SSH's naar een server verzendt. Ik kan bijvoorbeeld niet tegen BASH en moet ZSH gebruiken, hoe zorg ik ervoor dat ZSH samen met mijn profiel wordt geladen (.zsh_profile) wanneer ik naar de machine ss.

Ik wil ook geen reeks parameters met ssh doorgeven, kan ik de standaard shell niet instellen?


23
2018-01-27 06:34


oorsprong




antwoorden:


Ervan uitgaande dat u op Linux draait, kunt u de chsh commando.

chsh -s /bin/ksh foo
chsh -s /bin/bash username

29
2018-01-27 06:36



Houd er rekening mee dat het pad naar het binaire bestand moet zijn /etc/shells om de shell selecteerbaar te maken. - Kimvais
Ubuntu 16.04 heeft dit commando niet. - david.perez
@ david.perez Ja, dat doet het, in de passwd pakket. - dessert
Dit werkt niet als de verificatie wordt afgehandeld via LDAP - BlackSheep


man chsh verandert shell, werkt niet altijd

Je kunt ook blijven exec /bin/zsh in je bash login script. Dit zal bash instance vervangen door je shell.

Of je kunt doen ssh host "zsh -l"


9
2018-01-27 06:38



Waarom de -1 (15 tekens ...)? - Noufal Ibrahim
dat is een kleine letter L - hangtwenty
ssh -t is vereist om een ​​TTY te krijgen voor de laatste opties. Standaard als een commando (zoals zsh -l) wordt verstrekt, zou OpenSSH een niet-login shell doen, die TTY niet voor u zou toewijzen, en -l zal dat niet veranderen (omdat dat wordt uitgevoerd na inloggen). - Franklin Yu


Bewerk / etc / passwd (als u over de rechten beschikt of vraag uw systeembeheerder) om uw standaardshell te wijzigen.


7
2018-01-27 07:02



Om de een of andere reden hadden de gebruikers die ik recentelijk had gemaakt geen standaard shell. Dit werkte voor mij. Bedankt. - mimoralea
Bedankt, dit antwoord is geweldig. Ik had hier ook geen schelp. Ik vond de regel mijngebruikersnaam: x: 1000: 1000 :: / home / mijngebruikersnaam: en voegde / bin / bash toe aan het einde. Uit en in en mijn ssh-sessie gebruikt bash :) - Stewart Evans


Als je je standaard shell niet kunt veranderen, ssh -t user@host 'zsh -l' werken.

De -t vlag dwingt een pseudo-tty toewijzing, en de -l vlag spawnt a login shell.


4
2018-03-08 16:41





Ik weet niet zeker hoe je je lokale kunt plaatsen .zshrc naar externe server, (dat is zonder het daar permanent op te slaan), dit werkt voor mij om mijn login shell op een externe server te veranderen.

Omdat het een gedeeld account is, kan ik het gebruiken zsh alleen voor mezelf met deze methode.

Voeg dit toe aan uw ~/.ssh/config bestand op uw lokale computer.

Host yourServer
    HostName <IP, FQDN or DNS resolvable name>
    IdentityFile ~/.ssh/<your keyfile>
    RemoteCommand zsh -l
    RequestTTY force
    User <yourUsername>

Er kan een hackachtige manier zijn om te bereiken waar je naar op zoek bent, zoals hieronder.

WAARSCHUWING  Dit komt met geen garanties en ziet er niet 'wijs' uit, maar ik ben erin geslaagd om mijn lokale bestand naar de server te sturen en het in login-shell te gebruiken.

Host someHost
    HostName someIP
    IdentityFile ~/.ssh/somekey.pem
    RemoteCommand zsh -l -c 'sleep 1; source /tmp/somefile; zsh'
    PermitLocalCommand yes
    LocalCommand bash -c 'sftp %r@%h <<< "put /tmp/somefile /tmp/somefile"'
    RequestTTY force
    User someUser

Hoe het werkt?

  • RemoteCommand definieert wat moet worden uitgevoerd aan de externe kant.
  • LocalCommand definieert wat moet worden uitgevoerd op lokaal, dat wordt gebruikt om uw lokale bestand naar externe server te kopiëren voor sourcing. Hier is de vangst, het gebeurt pas na 'succesvolle' verbinding met remote host.

Betekenis:

  1. Uw verbinding met de afstandsbediening moet open en levend zijn
  2. Je externe shell heeft het bestand nog niet, dus het moet wachten tot het bestand er is, ergo sleep
  3. Uw lokale toepassingen sftp om uw bestand naar een externe server te plaatsen, wordt remote server wakker sleep en bronnen van uw scripts.

Het is super hackish, ik zou graag willen weten of er ook een betere manier is.

Bijwerken: Dit kan worden gebruikt in plaats van 'lange' slaaptijd:
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'


1
2018-06-11 05:39