SSH girişinde özel bir .bashrc dosyası nasıl kullanılır


21

Çalıştığım yeni şirkette, linux sunuculara nispeten kısa ömürlü olarak erişmek zorunda kaldığımı öğrendim. Bu sunucuların her birinde bir hesabım var, ancak ne zaman yeni bir tane oluşturulmuşsa .bashrc üzerinden aktarma zorluğundan geçmem gerekiyor. Bununla birlikte, yaklaşık bir ay içinde bu sunucu artık buralarda olmayacak. Ayrıca kısa sürede (dakikalar) diğer sunuculara da erişmem gerekiyor, burada .bashrc üzerinden aktarım yapmaya değmez ama çok fazla sunucu üzerinde çalıştığım için bu çok fazla zaman harcar.

Sunuculardaki hiçbir şeyi değiştirmek istemiyorum, ama "bağlantı başına" bir .bashrc'ye sahip olmanın bir yolu olup olmadığını merak ediyordum, bu yüzden ne zaman bir sunucuya SSH verirsem ayarlarım o oturum için kullanılacaktı.

Eğer mümkünse, aynı şeyi gitconfig dosyaları gibi diğer yapılandırma dosyalarıyla da yapabilseydim iyi olurdu.


Bu bağlantı başına bir çözüm değil, ancak yine de değerli bulabilirsiniz. GitHub'daki üsse göz atın . Süper Kullanıcı topluluğundaki bu cevabın diğer detayları .
codeforester

Yanıtlar:


6

Ne istediğinizi düşünüyorum (bağlandığınız makinedeki .ssh / config'inizde):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

o zaman dışarı çıkabilirsiniz:

source .bashrc

ve neşeli yolda ol. LocalCommand, bağlandığınız sunucudaki komutunu gerçek seansınızdan hemen önce, oraya ulaştığında yürütür.

Ben de sunucularda sshds ile yapılandırılmış olduğundan emin olun PermitLocalCommand yes

Bunu kendi ortamınızda çalışmasını sağlamak için bu LocalCommand komutunu ince ayar yapmanın birçok yolu vardır - örneğin bir dahili web sunucusundan kıvrılabilir veya bir nfs mount'dan çekebilirsiniz.


Birkaç not. Her şeyden önce, bash'ımı sunucuya aktarmak istediğim için scp komutundaki dosyaların sırasını değiştirdiğinizi düşünüyorum ve bunun tersine çevrildiğini düşünüyorum. İkincisi, sadece ; source /path/to/.bashrcotomatik olarak kaynaklanmak için scp komutundan sonra ekleyebilirsiniz . Son olarak, bu yöntemin çok önemli bir olumsuz olması, şifremi iki kere yazmam gerektiğidir. Ama sonunda işe yaradı, çok teşekkürler.
gsingh2011

bunun için üzgünüm! Kafamın dışında çalışıyordu, karışıklık için çok üzgünüm. Ortamınızda şifresiz anahtar kurulumları yapabiliyor musunuz? Bizim çevremizde bu var ve bu güzel bir şey. Yine de çalıştığına sevindim!
Quinn Murphy,

@ gsingh2011: Bağlandığınız source /path/to/.bashrcmakinede çalıştırılacak. Komutların LocalCommandssh oturumuna erişimi yok.
Oliver,

@Oliver Haklısın. Uzak bilgisayardan .bashrc kaynağını otomatikleştirmek için yerleştim. İlk girişte sunucu tarafında birkaç şeyi değiştirmek zorundayım, ancak daha önce yapmak zorunda olduğumdan çok daha uygun.
gsingh2011

16

Bence sshrc aradığın şey: https://github.com/Russell91/sshrc

sshrc, ssh gibi çalışır, ancak uzaktan oturum açtıktan sonra ~ / .sshrc kaynaklarına da sahiptir.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

Bunu, ortam değişkenlerini ayarlamak, işlevleri tanımlamak ve oturum açma sonrası komutları çalıştırmak için kullanabilirsiniz. Bu kadar basit ve sshrc kullanıyor olsalar bile sunucudaki diğer kullanıcıları etkilemeyecek. Daha gelişmiş yapılandırma için okumaya devam edin.


Lütfen yalnızca bağlantı içeren mesajlarla spam göndermeyi durdurun. Yorumlar ekleyebiliyorsunuz (sshrc ile ilgili gönderileriniz zaten).
Deer Hunter

3
Hepsini tamir etmeye çalışıyorum!
RussellStewart

Bitti. İlk defa sadece kısa linkli bir mesaj göndermeye başlamıştım. Şimdi daha iyi biliyorum.
RussellStewart

1
Uzun zaman önce ( sshrc'den önce) bir simil sshrc yazdım : github.com/fsquillace/pearl-ssh Daha verimli, küçük ve xxd bağımlılığı yok.
user967489

1

Daha önce sunucuya hiç isabet etmediyseniz, bunun için ~ / .ssh / known_hosts dizininde giriş olmaz.

Bilinen bir ana bilgisayarı "ssh-keygen -F" ile arayabilirsiniz, ancak ssh-keygen bir bayan için false döndürmediğinden, bu çıktıyı (grep) test etmeniz gerekir. Bir ana bilgisayara farklı tanımlayıcılar (IP adresi, ana bilgisayar adı, FQDN) ile başvurursanız, bunların her birinin ayrı durumlar olarak değerlendirildiğini unutmayın.

Kullanıcı ortamınızı ilk girişinizde o ana bilgisayara transfer eden ssh için bir sarmalayıcı yazabilirsiniz:

ssh-newenv () {eğer! ssh-keygen -F 1 $ | grep -q "^ # host $ 1 bulundu:"; rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; fi; ssh $ 1; }

Bunu daha sağlam hale getirmek istiyorsanız, uzak ana bilgisayardaki bilinen bir ortam dosyasının, karma değerinin veya başka bir işaretçinin olup olmadığını kontrol edebilirsiniz.


0

Bir seans başına bir olup olmadığını bilmiyorum.

Başka bir çözüm, tüm favori yapılandırmalarınızı yeni giriş klasörünüze aktaran küçük bir betik yazmak olacaktır.

Belki de tüm konfigürasyonlarınızı yollarla birlikte klasör yapın ve scp ile aktarın.

sevmek

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

ve sonra bir

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

Bu zaman kazandırır.


0

Bunun mümkün olduğunu sanmıyorum, ssh'in seninle hiçbir ilgisi yok .bashrc. Bu dosyayı yükleyen kabuktur, ssh değil.

Bazı fikirler:

  1. İlk giriş yaptığınızda uzak ana dizininizi ayarlayın.
  2. Her sunucuya .bashrc dosyanızı içeren ana dizininizi monte etmek için NFS kullanın. Bu şekilde, her yerde aynı ayarlara sahipsiniz.
  3. Uzak sunuculara iletilen bazı ortam değişkenleriyle ilgili sorun yoksa, SendEnvseçeneği işaretlemelisiniz ( ssh_configdaha fazla bilgi için man sayfasına bakın ). Sunucu doğru ayarlanmışsa (yani AcceptEnv, sshd_config dosyasında yeterliyse ), SendEnvortam değişkenlerinizi uzak ana bilgisayara kopyalamak için kullanabilirsiniz .
  4. Bunun işe yarayıp yaramadığını bilmiyorum, ancak uzaktaki ana makineye bağlanmadan önce ProxyCommandayarlarınızı ( ssh_configman sayfasına bakınız ) yanlış şekilde kullanabilirsiniz .bashrc. Bununla birlikte, bazı testler gerekir. Ayrıca, bunun scp ile karışabileceği konusunda hazırlıklı olun.

0

Sanırım https://github.com/fsquillace/pearl-ssh ihtiyacınız olanı yapıyor.

Sshrc doğmadan çok uzun zaman önce yazdım ve sshrc ile karşılaştırıldığında daha fazla yararı var:

  • Her iki ana bilgisayar için xxd bağımlılığı gerektirmez (uzak ana bilgisayarda kullanılamayabilir)
  • Pearl-ssh daha verimli bir kodlama algoritması kullanır
  • Bu sadece ~ 20 kod satırıdır (gerçekten anlaşılması kolay!)

Örneğin:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.