SSH tương đương với .profile / .bashrc


14

Tôi đang tìm cách để tự động xác định một số bí danh trong phiên của mình trên bất kỳ máy chủ nào tôi ssh đến. Tôi không thể đặt chúng vào các .bashrctệp trên máy chủ vì tài khoản người dùng tôi đăng nhập được chia sẻ bởi những người khác và bên cạnh đó có hàng tá trong số họ và việc duy trì tập lệnh trên mỗi máy sẽ gây đau đớn. Tôi biết tôi có thể sử dụng expectđể nhập các bí danh một cách tự động nhưng tôi chỉ tự hỏi liệu OpenSSH có bất cứ thứ gì tích hợp có thể được sử dụng để đạt được điều này không?

Câu trả lời:


7

Không có gì sai khi làm điều đó trong mong đợi. Một cách khác mà tôi đã làm nó cũng khá bẩn, với một kịch bản, đầu tiên hãy tìm hiểu hồ sơ bạn muốn chạy, sau đó ssh vào, chạy nó và duy trì kết nối.

Vì vậy, đặt tất cả các cài đặt hồ sơ trong một tệp cục bộ .<local username>-<hostname>-init.shvà chạy tập lệnh bên dưới để đăng nhập vào máy chủ từ xa.

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"

Tôi thích điều này bởi vì nó không yêu cầu bất kỳ cấu hình đặc biệt nào trên máy chủ, thật tuyệt!
Ramon

4

Bạn có thể đặt cấu hình của mình vào .bashrcvà chỉ để chúng thực thi khi bạn đăng nhập. Để thực hiện điều này, bạn có thể chuyển một biến môi trường thông qua ssh.

.bashrc sửa đổi

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config sửa đổi:

AcceptEnv ... IAMTHEGREATEST

.ssh/config sửa đổi (phía khách hàng):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc sửa đổi (phía khách hàng):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(chưa được kiểm tra, nhưng nên làm)


Làm thế nào để hoàn thành mục tiêu thiết lập mọi thứ tự động trên bất kỳ máy chủ nào mà OP đăng nhập?
womble

Nó không. Nó giải quyết phần "tài khoản người dùng tôi đăng nhập được chia sẻ bởi những người khác" một phần của câu hỏi
krissi

Đây gần như chính xác là những gì tôi làm, nhưng với một điểm khác biệt - thay vì chấp nhận biến môi trường đó từ bên ngoài, tôi đã đặt nó trong chính khóa SSH. Điều này có nghĩa là .ssh / ủy quyền_key chứa các dòng bắt đầu bằng môi trường = "IAMTHEGREATEST = forsure" ssh-dss ...
Bron Gondwana

3

Từ trang man ssh (1) , nếu bạn tạo tệp ~ / .ssh / rc , nó sẽ được thực thi TRƯỚC KHI vỏ đăng nhập của người dùng được thực thi, do đó tạo cơ hội thực hiện các tác vụ 'thiết lập trước' trước khi đăng nhập .. ví dụ đưa ra là gắn kết chia sẻ mạng trước khi đăng nhập.

Nếu bạn không muốn sử dụng các tệp ~ / .ssh / rc riêng lẻ , bạn có thể làm tương tự với / etc / ssh / sshrc . Một thử nghiệm nhanh để kiểm tra tên người dùng cụ thể của bạn hoặc một số phương pháp xác định có thể hạn chế những người khác thậm chí nhận thấy điều này đã được thực hiện.

/ etc / ssh / sshrc CHỈ có nguồn gốc nếu ~ / .ssh / rc không tồn tại, do đó bạn có thể đạt được hai lớp phức tạp một cách hiệu quả.


ding ding ding - chúng ta có một người chiến thắng!
Tạm dừng cho đến khi có thông báo mới.

Bỏ lỡ cái đó! Mặc dù trông hấp dẫn, nhưng điều này vẫn sẽ yêu cầu thiết lập từng máy chủ vì nó ở phía máy chủ phải không?
Ramon

yup, phía máy chủ, nhưng bạn chỉ phải quét một tập tin một lần. Thực sự không có cách nào dễ dàng để gửi một luồng lệnh được xử lý ngay khi đăng nhập. {Grin} Tuy nhiên, hãy cho tôi một chút, có thể viết một cái gì đó ... {không phải hôm nay!}
lornix

2

Bí danh được xác định và giải thích bởi shell.

Thật không may, không có cách nào sshđể chuyển chúng vào vỏ từ xa.

Bạn có thể viết một sshtrình bao bọc ở phía máy khách thiết lập một môi trường đẹp ở phía xa, nhưng nó sẽ không đẹp.


0

Nếu có thể, tôi sẽ lưu trữ một tập lệnh nhỏ khởi tạo / xác định mọi thứ bạn muốn trên một máy chủ có thể truy cập từ mọi nơi và thực hiện nó sau khi đăng nhập vào mỗi máy chủ.


0

Một giải pháp khả thi là đưa tập lệnh của bạn thiết lập mọi thứ lên máy chủ web mà tất cả các máy chủ khác có thể truy cập.

Sau đó, mỗi máy chủ chỉ cần một tập lệnh nhỏ để thực hiện một số thứ như:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

Bằng cách đó bạn chỉ phải cập nhật nó ở một nơi.


-3

Nhìn vào .ssh / config

Dưới đây là một ví dụ https://lookherefirst.wordpress.com/2007/12/17/a-simple-ssh-config-file/


Vui lòng cung cấp thêm chi tiết về lý do tại sao bạn nghĩ rằng điều này sẽ giúp.
Zoredache

Chúng tôi thực sự thích rằng câu trả lời chứa nội dung không phải con trỏ đến nội dung. Trong khi điều này về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo.
dùng9517
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.