Cách sử dụng tệp .bashrc tùy chỉnh khi đăng nhập SSH


21

Tôi đã thấy rằng với công ty mới mà tôi làm việc cùng tôi thường phải truy cập các máy chủ linux với vòng đời tương đối ngắn. Trên mỗi máy chủ này tôi có một tài khoản, nhưng bất cứ khi nào một tài khoản mới được tạo, tôi phải trải qua những rắc rối khi chuyển qua .bashrc của mình. Tuy nhiên, có thể trong khoảng một tháng nữa máy chủ sẽ không còn tồn tại nữa. Tôi cũng phải truy cập vào nhiều máy chủ khác trong một khoảng thời gian ngắn (vài phút) khi việc chuyển qua .bashrc của tôi không đáng nhưng vì tôi đang làm việc trên rất nhiều máy chủ, điều này làm tăng thêm rất nhiều thời gian lãng phí.

Tôi không muốn thay đổi bất cứ điều gì trên các máy chủ, nhưng tôi đã tự hỏi liệu có cách nào để có "mỗi kết nối" .bashrc không, vì vậy bất cứ khi nào tôi sẽ SSH tới máy chủ, cài đặt của tôi sẽ được sử dụng cho phiên đó.

Nếu điều này là có thể, thật tuyệt nếu tôi có thể làm điều tương tự với các tệp cấu hình khác, như các tệp gitconfig.


Đây không phải là một giải pháp cho mỗi kết nối nhưng bạn vẫn có thể thấy nó có giá trị. Kiểm tra cơ sở trên GitHub. Thêm chi tiết trong câu trả lời này trên cộng đồng Super User.
codeforester

Câu trả lời:


6

Tôi nghĩ những gì bạn muốn là (trong .ssh / config trên máy bạn kết nối):

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

sau đó bạn có thể dẫn ra:

source .bashrc

và được trên con đường vui vẻ của bạn. LocalCommand thực thi lệnh trên máy chủ mà bạn đang kết nối khi đến đó, ngay trước phiên thực tế của bạn.

Tôi cũng sẽ đảm bảo sshds trên các máy chủ được cấu hình với PermitLocalCommand yes

Có rất nhiều cách bạn có thể điều chỉnh LocalCommand để làm cho nó hoạt động trong môi trường cụ thể của bạn - bạn có thể cuộn tròn từ một máy chủ web nội bộ hoặc lấy từ một nfs mount chẳng hạn.


Một vài lưu ý. Trước hết, tôi nghĩ rằng bạn đã chuyển thứ tự của các tệp trong lệnh scp, vì tôi muốn chuyển bash của mình sang máy chủ và tôi nghĩ rằng bạn đã đảo ngược nó. Thứ hai, bạn chỉ có thể thêm ; source /path/to/.bashrcsau lệnh scp để có nguồn tự động. Cuối cùng, một tiêu cực không quan trọng của phương pháp này là tôi phải nhập mật khẩu của mình hai lần. Nhưng cuối cùng nó đã làm việc, vì vậy cảm ơn.
gsingh2011

xin lỗi vì điều đó! Đã làm việc ra khỏi đầu của tôi, rất xin lỗi về hỗn hợp. Bạn có thể thiết lập các thiết lập khóa mật khẩu trong môi trường của bạn không? Chúng tôi có điều đó trong môi trường của chúng tôi và đó là một điều đẹp. Vui vì làm việc mặc dù!
Quinn Murphy

@ gsingh2011: Điều đó source /path/to/.bashrcsẽ được thực thi trên máy bạn đang kết nối. Các lệnh trong LocalCommandkhông có quyền truy cập vào phiên ssh.
Oliver

@Oliver Bạn nói đúng. Tôi đã giải quyết để tự động tìm nguồn cung cấp .bashrc từ máy tính từ xa. Tôi phải thay đổi một vài thứ ở phía máy chủ trong lần đăng nhập đầu tiên, nhưng nó thuận tiện hơn nhiều so với những gì tôi phải làm trước đây.
gsingh2011

16

Tôi nghĩ sshrc là thứ bạn đang tìm kiếm: https://github.com/Russell91/sshrc

sshrc hoạt động giống như ssh, nhưng nó cũng nguồn ~ / .sshrc sau khi đăng nhập từ xa.

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

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

Bạn có thể sử dụng điều này để đặt các biến môi trường, xác định hàm và chạy các lệnh sau đăng nhập. Điều đó thật đơn giản và nó sẽ không ảnh hưởng đến những người dùng khác trên máy chủ - ngay cả khi họ cũng sử dụng sshrc. Để cấu hình nâng cao hơn, tiếp tục đọc.


Vui lòng ngừng spam với các bài viết chỉ liên kết. Bạn hoàn toàn có thể thêm nhận xét (dù sao bài đăng liên quan đến sshrc của bạn).
Deer Hunter

3
Tôi đang làm việc để sửa chữa tất cả chúng!
RussellStewart

Làm xong. Lần đầu tiên tôi đã bị cám dỗ để làm một bài viết chỉ liên kết ngắn. Bây giờ tôi biết rõ hơn.
RussellStewart

1
Tôi đã viết từ lâu (trước sshrc) một simil sshrc: github.com/fsquillace/pearl-ssh Nó chỉ hiệu quả hơn, nhỏ hơn và không có phụ thuộc xxd.
dùng967361

1

Nếu bạn chưa bao giờ truy cập máy chủ trước đó, sẽ không có mục nào trong ~ / .ssh / know_hosts cho nó.

Bạn có thể tìm kiếm một máy chủ đã biết với "ssh-keygen -F", nhưng bạn sẽ phải kiểm tra đầu ra đó (grep) vì ssh-keygen không trả về sai cho sai. Lưu ý rằng nếu bạn tham chiếu đến một máy chủ theo các mã định danh khác nhau (địa chỉ IP, tên máy chủ, FQDN), thì mỗi máy chủ này được coi là các trường hợp riêng biệt.

Bạn có thể viết một trình bao bọc cho ssh chuyển môi trường người dùng của bạn đến máy chủ đó trong lần đăng nhập đầu tiên:

ssh-newenv () {nếu! ssh-keygen -F $ 1 | grep -q "^ # lưu trữ $ 1 được tìm thấy:"; sau đó rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; fi; ssh $ 1; }

Nếu bạn muốn làm cho điều này mạnh mẽ hơn, bạn có thể kiểm tra sự tồn tại của tệp môi trường đã biết, hàm băm hoặc điểm đánh dấu khác trên máy chủ từ xa.


0

Tôi không biết nếu có một phiên .bashrc.

Một giải pháp khác là viết một tập lệnh nhỏ chuyển tất cả các cấu hình yêu thích của bạn vào thư mục nhà mới của bạn.

Có thể chỉ cần tạo thư mục với tất cả các cấu hình của bạn bằng các đường dẫn và chỉ cần chuyển chúng bằng scp

như

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

và sau đó một

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

Điều đó giúp tiết kiệm thời gian.


0

Tôi không nghĩ rằng điều đó là có thể, vì ssh không liên quan gì đến bạn .bashrc. Nó là shell tải tập tin đó, không phải ssh.

Một vài ý tưởng:

  1. Thiết lập thư mục nhà từ xa của bạn khi bạn đăng nhập lần đầu tiên.
  2. Sử dụng NFS để gắn thư mục chính của bạn chứa .bashrc của bạn trên mọi máy chủ. Bằng cách đó, bạn có cùng cài đặt ở mọi nơi.
  3. Nếu bạn ổn với chỉ một số biến môi trường được truyền đến các máy chủ từ xa, bạn nên kiểm tra SendEnvtùy chọn (xem ssh_configtrang hướng dẫn để biết thêm thông tin). Nếu máy chủ được thiết lập chính xác (nghĩa là nó có đầy đủ AcceptEnvtrong sshd_config), bạn có thể sử dụng SendEnvđể sao chép các biến môi trường của mình sang máy chủ từ xa.
  4. Tôi không biết nếu nó hoạt động, nhưng có lẽ bạn có thể sử dụng sai ProxyCommandcài đặt (xem ssh_configtrang hướng dẫn) để gửi qua .bashrccác tệp của bạn hoặc các tệp khác trước khi kết nối với máy chủ từ xa. Điều đó sẽ yêu cầu một số thử nghiệm, mặc dù. Ngoài ra, hãy chuẩn bị rằng điều này có thể can thiệp vào scp.

0

Tôi nghĩ rằng https://github.com/fsquillace/pearl-ssh làm những gì bạn cần.

Tôi đã viết nó từ lâu trước khi sshrc ra đời và nó có nhiều lợi ích hơn so với sshrc:

  • Nó không yêu cầu phụ thuộc vào xxd cho cả hai máy chủ (có thể không có trên máy chủ từ xa)
  • Pearl-ssh sử dụng thuật toán mã hóa hiệu quả hơn
  • Nó chỉ là ~ 20 dòng mã (thực sự dễ hiểu!)

Ví dụ:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.