שאלה כיצד ניתן לשנות באופן אוטומטי את המדריך ב- SSH?


אני מנסה להשיג ssh כדי לשנות באופן אוטומטי לספריה מסוימת כאשר אני נכנס. ניסיתי לקבל את התנהגות זו פועלת באמצעות ההנחיות הבאות ב ~/.ssh/configYou

Host example.net
LocalCommand "cd web"

אבל בכל פעם שאני מתחבר, אני רואה את הדברים הבאים:

/bin/bash: cd web: No such file or directory

אם כי יש בהחלט web תיקייה בספריית הבית שלי. גם באמצעות נתיב מוחלט נותן את אותו המסר. כדי להיות ברור, אם אני סוג cd web לאחר כניסה אני מקבל את התיקייה הנכונה.

מה חסר לי כאן?

עריכה:

שילובים שונים של ציטוטים / נתיבים מוחלטים נותנים הודעות שגיאה שונות:

LocalCommand "cd web"
/bin/bash: cd web: No such file or directory

LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory

LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error

זה גורם לי לחשוב כי ציטוטים לא צריך להיות שם, וכי יש עוד שגיאה קורה.


79
2017-08-05 14:40




LocalCommand פועל במערכת המקומית שלך, לא במערכת המרוחקת. - Steve Kehlet
ראה כאן superuser.com/a/124110/47962 - Nakilon


תשובות:


cd הוא פגז בנוי. LocalCommand מבוצע כמו:

/bin/sh -c <localcommand>

מה שאתה מחפש לעשות לא באמת יכול להיות מושלם באמצעות SSH; אתה צריך לשנות את הקליפה בדרך כלשהי, למשל. באמצעות bashrc / bash_profile.


19
2017-08-05 15:52



כן, רק רציתי להזכיר אותו. אתה יכול לשים את cd הפקודה ב ~/.bashrc במקום השרת המרוחק. - vdboor
זה מעצבן. כפי שציינתי הערה אחרת, השרת יש מספר hostnames ואני רוצה להיות התנהגות שונה המבוססת על אשר שימש. אני מניח שזה לא ניתן לקבוע מה היה בשימוש מ .bashrc? - Gareth
זה אפשרי, פשוט לא מומלץ. משהו כמו החלפת ssh עם סקריפט פגז קטן או כינוי שעובר את שם המארח כמשתנה להיות מיוצא (a "ssh-s משתמש @ מארח" ייצוא connhostname = המארח; bash - login '"). אבל אתה מתחיל להיכנס לשטח מוזר מאוד, אכן. אולי שאלה טובה יותר היא, למה אתה רוצה את זה? - BMDan
זה לא ממש עניין גדול להיות כנים. אני רק במצב שבו הרוב המכריע של הזמן אני נכנס לשרת זה אני ישר ישר לאחד משני ספריות (תלוי באיזה מארח אני משתמש) - Gareth


זה עובד:

ssh server -t "cd /my/remote/directory; bash --login"

כדי ליצור ספריה אם היא אינה קיימת:

ssh server -t "mkdir -p newfolder; cd ~/newfolder; pwd; bash --login"

אם לא תוסיף bash עד סוף השביל ואז אתה יוצא לאחר cd קומנד רץ. ואם לא תוסיף --login אז שלך ~/.profile הוא לא מקור.


76
2017-12-21 21:29



זה מסתיים לי במיקום הנכון, עם הפקודה bash. מושלם! - Peter Ehrlich
זה עובד גם בשבילי, אבל אם אני מנסה להשתמש בו עם ssh לקפוץ מארח זה לא עובד. אני מקבל חיבור סגור ההודעה. - Riccardo


  1. היכנס לתיבה שלך
  2. ערוך ~/.bash_profile 
  3. בסוף הקובץ הוסף cd /path/to/your/destination
  4. שמור אותו & צא העורך שלך
  5. יציאה מהתפריט
  6. התחבר שוב ואתה צריך לנחות אותו פנימה /path/to/your/destination

40
2018-02-27 11:04



על כמה מכונות ייתכן שיהיה עליך צורך לצרף cd /path/to/your/destination ל ~/.bashrc במקום ~/.bash_profile. התוצאה צריכה להיות זהה. - Matthias
זה עובד בצורה מושלמת תודה - זה מוגבל רק מזהה המשתמש שלי או שזה ישפיע על משתמשים אחרים הכניסה גם כן? - barry_allen
@BabyGroot אם תשנה ~/.bash_profile או ~/.bashrc זה ישפיע רק על המשתמש הנוכחי. - rubenvarela


פתרון חזק יותר עבור המקרה כאשר אתה צריך ssh ו לעקוף את ברירת המחדל .bashrc הקובץ. אפשרות זו שימושית במקרים שבהם סביבת השרתים המרוחקים כוללת מספר רב של נקודות בסיס ומשמשות משתמשים מרובים.

alias ssh_myserver='ssh server_name -t "echo cd /path/to/desired/dir>/tmp/.bashrc_tmp; bash --rcfile /tmp/.bashrc_tmp"'

מפורט יותר:

  1. הפקודה הראשונה יוצרת .bashrc_tmp קובץ ב /tmp בספריה המרוחקת עם תוכן cd /path/to/dir
  2. הפקודה הבאה מבצעת bash עם קובץ config שצוין בשלב 1. זה מאפשר לעבור את הדיר הרצוי לדכא את ברירת המחדל .bashrc.
  3. כל פקודה זו עטופה alias, כך על לקוח Ssh הפקודה הפקודה ניתן לקרוא בשם ssh_myserver

5
2017-08-21 11:53



Creative ... כל עוד יש לך לכתוב perms ל / tmp - smci


האם הפעלת את ההוראה הזו בתצורת ssh?

PermitLocalCommand yes

ברירת המחדל עבור זה no, ובמקרה זה שלך LocalCommand ההוראה תתעלם.

לחלופין, האם ניסית להוסיף את הפקודה שלך .bashrc להגיש?


4
2017-08-05 14:47



הנחיה זו נקבעת, כן (ואני מניח שלא הייתי רואה את הודעת השגיאה המוצגת אם היא לא הייתה). הבעיה עם השימוש .bashrc היא כי השרת יש שמות המארח שונים, ואני רוצה שמות מארח שונים לתרגם לספריות המוצא שונים - Gareth
אלא אם כן לכל שם מארח יש כתובת IP אחרת, לא תהיה שום אפשרות לשרת לדעת איזה שם מארח ביקשת. בעוד שבקשות HTTP מספקות כותרת מארח ידידותית לזיהוי שם המארח המבוקש, חיבורי SSH אינם. - Fosco


אז חיפשתי הרבה אתרים (stackoverflow, זה אחד), אבל לא מצאתי את מה שרציתי. בסופו של דבר אני יוצר את התסריט שלי פגז. אני מדביק את זה כאן. כמו כן ניתן להעתיק אותו בספרייה ב $ PATH.

#!/bin/bash
ssh -t <username@hostname> "cd ~/$1; exec \$SHELL --login"

אז אחרי זה. עידו:

connect <foldername>

הערה: ייתכן שיהיה עליך להתנתק ולהיכנס שוב לאחר שינוי משתנה הנתיב


4
2017-11-25 03:10



אני מעדיף את ההצעה הקודמת כי '$ SHELL' תמיד תקף, בעוד 'bash' לא יכול להיות. גם השימוש של "exec" הוא מגע נחמד. - Dave
חידוד נוסף יהיה להבטיח 'CD' מוצלח - "CD ~ / $ 1 && exec ..." - Dave


שלך ~/.ssh/configYou

LocalCommand echo '/home/%r/some/subdir' > /home/%r/.ssh/ssh_cd

בסוף שלך ~/.bashrcYou

if [[ -f $HOME/.ssh/ssh_cd ]]
then
    cd $(<$HOME/.ssh/ssh_cd)
    # uncomment the line below and the file will be removed so the cd won't work
    # unless the file is regenerated since you may not want this to operate for
    # non-ssh logins or for ssh logins that you want to function differently
    # rm $HOME/.ssh/ssh_cd
fi

ניסיתי לעשות את זה באמצעות משתנה משתנה, כולל עם משתנה מיוצא, אבל פקודות אלה לקבל לרוץ פגזים שונים.

כאשר בודקים את מה שניסית לעשות, לא קיבלתי שגיאה כשהשתמשתי בנתיב המוחלט הבלתי רשום, דרך אגב. הוספתי ; pwd בסוף הפקודה ואת הספרייה הנכונה מוצג, אבל הספרייה אני בסופו של דבר הוא ~. אין cd פקודות בקבצים ההפעלה שלי פגז. ניסיתי לשים אחרת cd somedir; pwdin ~/.ssh/rc (עם השני עדיין במקום). ה config הפקודה מבוצעת לפני שהמוצר יונפק rc הפקודה היא שהונפקו לאחר מכן, אבל לפני קבצי ההפעלה פגז הם המקור. אז שוב, זה קורה בקליפה אחרת.

נסה את הטכניקה חולפת על ידי קובץ ולהודיע ​​לי אם זה עובד בשבילך.


3
2017-08-05 18:21





האם ניסית את זה בלי המרכאות סביבו? הדוגמאות היחידות שראיתי לא מחזיקות בהן כל כך עם זה זה יכול להיות מנסה לבצע cd \ אינטרנט כפקודה.


2
2017-08-05 15:03



אישור, הסרת ציטוטים נראה לעזור אבל עדיין יש לי שגיאות (ראה פוסט נערך) - Gareth


אתה יכול גם לנסות את זה, עם אפשרות -tYou

ssh server -t "cd /my/remote/directory; bash"

0
2017-09-21 09:03