ฉันไม่แน่ใจว่าคุณจะวางโลคัล.zshrc
เซิร์ฟเวอร์ของคุณไว้ในที่ใดได้บ้าง (นั่นคือไม่มีการจัดเก็บไว้อย่างถาวร) มันใช้งานได้สำหรับฉันที่จะเปลี่ยนเปลือกล็อกอินของฉันบนเซิร์ฟเวอร์ระยะไกล
เนื่องจากเป็นบัญชีที่ใช้ร่วมกันฉันจึงสามารถใช้zsh
วิธีนี้ได้ด้วยตัวเองเท่านั้น
เพิ่มสิ่งนี้ไปยัง~/.ssh/config
ไฟล์ของคุณในเครื่องท้องถิ่นของคุณ
Host yourServer
HostName <IP, FQDN or DNS resolvable name>
IdentityFile ~/.ssh/<your keyfile>
RemoteCommand zsh -l
RequestTTY force
User <yourUsername>
อาจมีวิธีแฮ็กที่จะบรรลุสิ่งที่คุณต้องการเช่นด้านล่าง
คำเตือน สิ่งนี้มาพร้อมกับการรับประกันและไม่ดู 'ฉลาด' แต่ฉันจัดการเพื่อวางไฟล์ในเครื่องของฉันไปยังเซิร์ฟเวอร์และส่งมาที่เชลล์การเข้าสู่ระบบโดยใช้สิ่งนี้
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
มันทำงานอย่างไร?
RemoteCommand
กำหนดสิ่งที่จะต้องทำงานในด้านระยะไกล
LocalCommand
กำหนดสิ่งที่ต้องรันบนโลคัลซึ่งใช้เพื่อคัดลอกโลคัลไฟล์ของคุณไปยังรีโมตเซิร์ฟเวอร์สำหรับการจัดหา นี่คือการจับมันเกิดขึ้นหลังจากการเชื่อมต่อ 'สำเร็จ' กับโฮสต์ระยะไกล
ความหมาย:
- การเชื่อมต่อของคุณกับรีโมตควรเปิดและมีชีวิตชีวา
- รีโมตเชลล์ของคุณยังไม่มีไฟล์ดังนั้นจึงต้องรอจนกว่าไฟล์จะอยู่ที่นั่นดังนั้น
sleep
- โลคัลของคุณใช้
sftp
เพื่อนำไฟล์ของคุณไปยังเซิร์ฟเวอร์ระยะไกลเซิร์ฟเวอร์ระยะไกลจะตื่นขึ้นมาsleep
และสคริปต์ของคุณที่มา
มันแฮ็คสุดฉันอยากจะรู้ว่ามีวิธีที่ดีกว่าเช่นกัน
อัปเดต: สามารถใช้งานได้แทนที่จะใช้เวลาพักเครื่องนาน
RemoteCommand zsh -l -c 'while [[ ! -f /tmp/somefile ]]; do sleep 0.05; done; source /tmp/somefile; zsh'
/etc/shells
ให้เชลล์เลือกได้