ssh-agent ඉදිරියට යැවීම සහ වෙනත් පරිශීලකයෙකුට sudo


159

මම, මා මාගේ ssh යතුර එහෙමවත් සේවාදායකය ඒ ඇති මම "sudo su - විධානය otheruser" හැකියාව ඇති නම්, env විචල්ය ඉවත් නිසා, මම, ප්රධාන යොමු අහිමි හා එම සොකට් මගේ මුල් පරිශීලකයා විසින් පමණක් කියවිය හැකි ය. "Sudo su - otheruser" හරහා මට යතුර ඉදිරියට යැවිය හැකි ක්‍රමයක් තිබේද, එබැවින් මගේ ඉදිරියට යතුර (මගේ නඩුවේ git clone සහ rsync) සමඟ B සේවාදායකයේ දේවල් කළ හැකිද?

මට සිතිය හැකි එකම ක්‍රමය වන්නේ මගේ යතුර වෙනත් පරිශීලක සහ "ssh otheruser @ localhost" වෙත එකතු කිරීමයි, නමුත් එය මා සතුව ඇති සෑම පරිශීලකයෙකුටම සහ සේවාදායක සංයෝජනයකටම කරදරකාරී වේ.

කෙටියෙන්:

$ sudo -HE ssh user@host
(success)
$ sudo -HE -u otheruser ssh user@host
Permission denied (publickey). 

Answers:


191

ඔබ සඳහන් කළ පරිදි, sudoආරක්ෂක හේතූන් මත පරිසර විචල්‍යයන් ඉවත් කරනු ලැබේ .

නමුත් වාසනාවකට මෙන් sudoවින්‍යාසගත කළ හැකිය: env_keepවින්‍යාස කිරීමේ විකල්පයට ස්තූතිවන්ත වීමට ඔබට අවශ්‍ය පරිසර විචල්‍යයන් ඔබට හරියටම කිව හැකිය /etc/sudoers.

නියෝජිතයා යොමු කිරීම සඳහා, ඔබ SSH_AUTH_SOCKපරිසර විචල්‍යය තබා ගත යුතුය. එසේ කිරීමට, ඔබේ /etc/sudoersවින්‍යාස ගොනුව සංස්කරණය කරන්න (සෑම විටම භාවිතා කරයි visudo) සහ env_keepසුදුසු පරිශීලකයින්ට විකල්පය සකසන්න . සියලුම පරිශීලකයින් සඳහා මෙම විකල්පය සැකසීමට ඔබට අවශ්‍ය නම්, මේ ආකාරයට Defaultsරේඛාව භාවිතා කරන්න :

Defaults    env_keep+=SSH_AUTH_SOCK

man sudoers වැඩි විස්තර සඳහා.

ඔබ දැන් (ලබා මේ වගේ දෙයක් කරන්න හැකි විය යුතුය user1ගේ පොදු යතුර දක්නට ලැබේ ~/.ssh/authorized_keysතුළ user1@serverAහා user2@serverB, හා serverAගේ /etc/sudoersඉහත සඳහන් පරිදි ගොනු සැකසුම වේ):

user1@mymachine> eval `ssh-agent`  # starts ssh-agent
user1@mymachine> ssh-add           # add user1's key to agent (requires pwd)
user1@mymachine> ssh -A serverA    # no pwd required + agent forwarding activated
user1@serverA> sudo su - user2     # sudo keeps agent forwarding active :-)
user2@serverA> ssh serverB         # goto user2@serverB w/o typing pwd again...
user2@serverB>                     # ...because forwarding still works

1
මෙය නිවැරදි පිළිතුරයි, සලකුණු කළ යුතුය.
Xealot

46
මෙම පමණක් , වැඩ නම් user2වේ ඉහත root! එසේ නොමැතිනම්, user2SSH_AUTH_SOCK නිවැරදිව සකසා ඇත, නමුත් user2උදා: tmp / ssh-GjglIJ9337 / වෙත ප්‍රවේශ වීමට නොහැකි වනු ඇත. rootඑම ප්‍රවේශය ඇත. එබැවින් මෙය ගැටලුවේ කොටසක් විසඳිය හැකි නමුත් OPs නොවේ: " සහ සොකට්ටුව කියවිය හැක්කේ මගේ මුල් පරිශීලකයාට පමණි"
පීටර් වී. මාර්ච්

6
Defaults>root env_keep+=SSH_AUTH_SOCKSudoing විට වග බලා ගන්න එකම ඉදිරියට කළ යුතු කිරීමට මූල. ආරක්ෂක හේතූන් මත වෙනත් පරිශීලකයින්ට එය කෙසේ හෝ කිරීමට ඔබට අවශ්‍ය නැත. Otherother සඳහා වෙනම ssh-agent ධාවනය කර වඩා හොඳ යතුරු එක් කිරීම වඩා හොඳය.
පෝල් ෂයිස්කා

1
sudo su -මට වැඩ කරන්නේ නැත, අනුමාන වශයෙන් එයට sudoෂෙල් ආරම්භක වේලාවේ නොමැති නිසා පරිසරය ආරක්ෂා කළ නොහැක . sudo suවැඩ කරන බව පෙනේ.
ඇලෙක්ස් ෆෝචූනා

4
මිනිසුන් sudo suකෙසේ හෝ භාවිතා කරන්නේ මන්දැයි මට කවදාවත් වැටහී නැත. ඔබ root shell අවශ්ය නම්, ඒ දේ sudo -sහෝ sudo -iසඳහා වේ.
eaj

76
sudo -E -s
  • -E පරිසරය ආරක්ෂා කරනු ඇත
  • -s විධානයක් ක්‍රියාත්මක කරයි, පෙරනිමියෙන් කවචයකට

මුල් යතුරු තවමත් පටවා ඇති මූල කවචයක් මෙය ඔබට ලබා දෙනු ඇත.


2
ඉහත අදහස් දැක්වීමේදී මෙන්, මෙය ඔබ root බවට පත්වන්නේ නම් පමණක් ප්‍රශ්නයට ආමන්ත්‍රණය කරයි, මන්ද එවැනි අවස්ථාවකදී root SSH_AUTH_SOCK හි සාමාන්‍ය ප්‍රවේශ අවසරයන් ලබා ගත හැකිය.
doshea

4
SSH_AUTH_SOCK සියලු පරිසර විචල්‍යයන් සංරක්ෂණය කරනවා වෙනුවට පරිසර විචල්‍යය පමණක් සංරක්ෂණය කිරීමට ඔබට නියම කළ හැකියsudo --preserve-env=SSH_AUTH_SOCK
ටයිලර් රික්

Yt ටයිලර් රික් නිවැරදි පිළිතුර ලබා දුන්නේය.
greatvovan

38

ගොනුවට ප්‍රවේශ වීමට වෙනත් පරිශීලකයාට ඉඩ දෙන්න $SSH_AUTH_SOCK, එය නාමාවලිය, උදාහරණයක් ලෙස නිවැරදි ACL මඟින් ඒවා මාරු වීමට පෙර. ආදර්ශය උපකල්පනය Defaults:user env_keep += SSH_AUTH_SOCKදී /etc/sudoersසත්කාරක පරිගණකයේ:

$ ssh -A user@host
user@host$ setfacl -m otheruser:x   $(dirname "$SSH_AUTH_SOCK")
user@host$ setfacl -m otheruser:rwx "$SSH_AUTH_SOCK"
user@host$ sudo su - otheruser
otheruser@host$ ssh server
otheruser@server$

වඩා ආරක්ෂිත වන අතර මූල නොවන පරිශීලකයින් සඳහාද ක්‍රියා කරයි ;-)


7
මෙම ක්‍රමය භාවිතා කරන විට මතක තබා ගන්න, අනෙක් පුද්ගලයින්ට otheruserඔබේ ssh සත්‍යාපනය භාවිතා කළ හැකි බැවින් ලොග් වී ඇත .
gitaarik

මට "sudo su - otheruser" "sudo su otheruser" ලෙස වෙනස් කිරීමට සිදු වූවා හැර (මෙය ඉවත් කිරීම) හැර මෙය මට වැඩ කරයි.
චාල්ස් ෆින්කල්

1
ඇයි rwxසහ නැත්තේ rw(හෝ කොහෙත්ම r)?
anatoly techtonik

3
@anatolytechtonik සිට man 7 unix- ලිනක්ස් මත සොකට්ටුවට සම්බන්ධ වීමට එම සොකට්ටුවේ කියවීමට හා ලිවීමට අවසර අවශ්‍ය වේ. තවද ඔබට සොකට් නිර්මාණය කරන නාමාවලියෙහි සෙවීම (ක්‍රියාත්මක කිරීම) සහ ලිවීමේ අවසරය අවශ්‍ය වේ හෝ ඔබ මෙම සොකට්ටුවට සම්බන්ධ වන විට පමණක් සෙවීම (ක්‍රියාත්මක කිරීම) අවසරය අවශ්‍ය වේ. එබැවින් ඉහත පිළිතුරෙහි සොකට් සඳහා ක්‍රියාත්මක කිරීමේ අවසරය අතිරික්ත වේ.
මික්සෙල්

/ etc / sudoers සංස්කරණය කිරීම වෙනුවට ඔබට භාවිතා කළ හැකියsudo -u otheruser --preserve-env=HOME -s
Sec

14

මෙයද ක්‍රියාත්මක වන බව මම සොයාගෙන ඇත්තෙමි.

sudo su -l -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK; bash"

අනෙක් අය සටහන් කර ඇති පරිදි, ඔබ මාරු වන පරිශීලකයාට $ SSH_AUTH_SOCK හි කියවීමේ අවසර නොමැති නම් මෙය ක්‍රියා නොකරනු ඇත (එය root හැර වෙනත් ඕනෑම පරිශීලකයෙකි). $ SSH_AUTH_SOCK සහ අවසර 777 ලබා ගත යුතු නාමාවලිය සැකසීමෙන් ඔබට මෙය වටහා ගත හැකිය.

chmod 777 -R `dirname $SSH_AUTH_SOCK`
sudo su otheruser -l -c "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK; bash"

මෙය තරමක් අවදානම් සහගත ය. ඔබ මූලිකවම පද්ධතියේ අනෙක් සෑම පරිශීලකයෙකුටම ඔබේ SSH නියෝජිතයා භාවිතා කිරීමට අවසර ලබා දෙයි (ඔබ ඉවත් වන තුරු). ඔබට කණ්ඩායම සැකසීමට සහ අවසර 770 ට වෙනස් කිරීමට හැකි විය හැකිය, එය වඩාත් ආරක්ෂිත විය හැකිය. කෙසේ වෙතත්, මම කණ්ඩායම වෙනස් කිරීමට උත්සාහ කළ විට, මට "මෙහෙයුමට අවසර නැත".


7
මෙය අතිශයින්ම අවදානම් සහගත ය. ඔබේ SSH නියෝජිතයා භාවිතා කිරීමට අනෙක් සෑම පරිශීලකයෙකුටම අවසර ලබා දීම ඔබේ සියලු අක්තපත්‍ර ඔවුන්ට ලබා දීමට සමාන වේ (තවද ඔබ කවදා හෝ sudo හෝ su භාවිතා කරන්නේ නම්, පද්ධතියේ අනෙක් සියලුම පරිශීලකයින්ට මෙන්ම ඔබ භාවිතා කරන අනෙකුත් සියලුම පද්ධති කෙරෙහි ඔවුන්ට මූල බලය ලබා දෙයි!) . මෙය කිසි විටෙකත් නොකළ යුතුය!
මාටිජා නාලිස්

5
"මෙය කිසි විටෙකත් නොකළ යුතුය" යන ප්‍රකාශයට මම එකඟ නොවෙමි. මෙම අවදානම පිළිගත හැකි අවස්ථා බොහොමයක් තිබේ. උදාහරණයක් ලෙස, සෑම කෙනෙකුටම එකම අවසරයන් ඇති කුඩා කණ්ඩායමක් සහ ඔබ අනෙක් සියලුම පරිශීලකයින් විශ්වාස කරයි. එයට ඇති අවදානම් තේරුම් නොගෙන එය කිසි විටෙකත් නොකළ යුතුය. නමුත් එම අවදානම් තේරුම් ගත් පසු, අවදානම පිළිගත හැකි අවස්ථා තිබේ.
phylae

6

ඔබට අවසර දී ඇත්නම් , වලංගු පොදු යතුරක් සමඟ US USER හි නිවාස නාමාවලියෙහි ඒ වෙනුවට sudo su - $USERකිරීමට අවසර දීම සඳහා ඔබට හොඳ තර්කයක් තිබිය හැකිය ssh -AY $USER@localhost. එවිට ඔබේ සත්‍යාපන ඉදිරිපත් කිරීම ඔබ සමඟ ගෙන යනු ඇත.


ඔහුගේ ප්‍රශ්නයේ පතුලේ එය සඳහන් කළ ඔහු එය කිරීම දුෂ්කර බව පැවසීය.
ෆහාඩ් සදා

මෙය බොහෝ විට හොඳම විසඳුම විය හැකි නමුත් $ USER සැබෑ පුද්ගලයෙක් (tm) නම් එය කෙස් ගසයි - ඔවුන් SA හි යතුර
බලයලත්_කයිස්

ඔබට බලයලත්_කයිස් වෙත ඔවුන්ගේ ලිඛිත ප්‍රවේශය ඉවත් කළ හැකිය (ඔවුන් ඇත්ත වශයෙන්ම ෆ්ලෝරියන් ප්‍රවේශය ප්‍රතික්ෂේප කර තිබේ නම්, ඔවුන්ට එය මකා දමා ප්‍රතිනිර්මාණය කළ හැකිය, එය ඔවුන් සතුව ඇති නාමාවලියක තිබීම)
ෆහාඩ් සදා

6

ඔබට සැමවිටම sudo භාවිතා කරනවා වෙනුවට නියෝජිතයා ඉදිරියට යැවීමෙන් localhost වෙත මාරු විය හැකිය:

ssh -A otheruser@localhost

අවාසිය නම් ඔබට නැවත පුරනය වීමට අවශ්‍ය වීමයි, නමුත් ඔබ එය තිර / ටීඑම්එක්ස් ටැබ් එකක භාවිතා කරන්නේ නම් එය එක් වරක් පමණක් වන උත්සාහයකි, කෙසේ වෙතත්, ඔබ සේවාදායකයෙන් විසන්ධි වුවහොත් සොකට් එක නැවත කැඩී යනු ඇත. . එබැවින් ඔබගේ තිරය / ටීඑම්එක්ස් සැසිය සෑම විටම විවෘතව තබා ගත නොහැකි නම් එය වඩාත් සුදුසු නොවේ (කෙසේ වෙතත්, ඔබ SSH_AUTH_SOCKසිසිල් නම් ඔබේ එන්වී වර් අතින් යාවත්කාලීන කළ හැකිය ).

Ssh ඉදිරියට යැවීමේදී, root හට සැමවිටම ඔබේ සොකට්ටුවට ප්‍රවේශ විය හැකි අතර ඔබේ ssh සත්‍යාපනය භාවිතා කළ හැකිය (ඔබ ssh ඉදිරියට යැවීම සමඟ ලොග් වී සිටින තාක් කල්). එබැවින් ඔබට root විශ්වාස කළ හැකි බවට වග බලා ගන්න.


ඔබට SSH otheruserහරහා පමණක් පිවිසිය හැකි නම් මෙය ක්‍රියාත්මක නොවේ sudo(උදා: ඔබට SCP දේවල් අවශ්‍ය නම් www-data)
ගර්ට් වැන් ඩෙන් බර්ග්

මෙමඟින් mysql විධානය පිළිබඳ මගේ ගැටළුව su පරිශීලකයා වෙනුවට මුල් ssh පරිශීලකයා භාවිතා කර විසඳා ඇත, බොහෝ විට එහි ස්වයංක්‍රීය පරිශීලක හඳුනාගැනීමේ පහසුව සඳහා වූ දෝෂයකි.
මල්හාල්

3

භාවිතා නොකරන්න sudo su - USER , ඒ වෙනුවට sudo -i -u USER. මා වෙනුවෙන් වැඩ කරයි!


ඔබ සතුව ඇති සුඩෝ අනුවාදය කුමක්ද? පතල (1.6.7p5, CentOS 4.8) එහි මෑන් පිටුවේ -i නොමැත.
ඩේවිඩ් මැකින්ටොෂ්

Sudo version 1.6.9p17ඩේබියන් ලෙනී මත ධාවනය වේ. උත්සාහ කරන්න sudo -s?
ෆහාඩ් සදා

6
මට වැඩ කරන්නේ නැහැ.

උබුන්ටු හි, සුඩෝ 1.8.9 පි 5 භාවිතා කරමින්, මා වෙනුවෙන් වැඩ කරන්නේවත් sudo -sනැත sudo -i...
ජෝන් එල්.

3

මා විසින් ඉදිරිපත් කරන ලද අනෙක් පිළිතුරු වලින් තොරතුරු ඒකාබද්ධ කිරීම:

user=app
setfacl -m $user:x $(dirname "$SSH_AUTH_SOCK")
setfacl -m $user:rwx "$SSH_AUTH_SOCK"
sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" -u $user -i

sudoersගොනුව සංස්කරණය කිරීමට අවශ්‍ය නැති නිසා මම මේකට කැමතියි .

උබුන්ටු 14.04 හි පරීක්ෂා කර ඇත ( aclපැකේජය ස්ථාපනය කිරීමට සිදු විය ).


1

ඔබගේ -විධානයෙන් පසු (ඩෑෂ්) විකල්පය සමඟ ගැටළුවක් ඇතැයි මම සිතමි su:

sudo su - otheruser

ඔබ su හි man පිටුව කියවන්නේ නම් , විකල්පය -, -l, --loginමඟින් ෂෙල් පරිසරය පිවිසුම් කවචයක් ලෙස ආරම්භ වන බව ඔබට පෙනී යනු ඇත. otheruserඔබ ධාවනය වන env විචල්‍යයන් නොසලකා මෙය පරිසරය වනු ඇත su.

සරලව කිවහොත්, ඉර ඉර ඔබ පසු කළ ඕනෑම දෙයක් අඩපණ sudoකරයි.

ඒ වෙනුවට, ඔබ මෙම විධානය උත්සාහ කළ යුතුය:

sudo -E su otheruser

@ Joao-costa පෙන්වා දුන් පරිදි, -Eඔබ දිව ගිය පරිසරයේ සියලු විචල්‍යයන් ආරක්ෂා කරනු ඇත sudo. ඉරක් නොමැතිව, suඑම පරිසරය කෙලින්ම භාවිතා කරනු ඇත.


0

අවාසනාවකට ඔබ වෙනත් පරිශීලකයෙකුට නඩු පවරන විට (හෝ සුඩෝ භාවිතා කිරීමට පවා) ඔබගේ ඉදිරියට යැවූ යතුරු භාවිතා කිරීමේ හැකියාව ඔබට අහිමි වේ. මෙය ආරක්ෂක ලක්ෂණයකි: අහඹු පරිශීලකයින් ඔබේ ssh- නියෝජිතයා හා සම්බන්ධ වී යතුරු භාවිතා කිරීම ඔබට අවශ්‍ය නැත :)

"Ssh -Ay $ {USER @ ocalcalhost" ක්‍රමය ටිකක් අවුල් සහගතයි (සහ ඩේවිඩ්ගේ පිළිතුර කැඩී බිඳී යාමේ අවදානම පිළිබඳ මගේ අදහස් දැක්වීමේදී සඳහන් කර ඇති පරිදි), නමුත් එය ඔබට කළ හැකි හොඳම දේ විය හැකිය.


1
හ්ම්, නමුත් මම මෙය ssh සමඟ කළහොත්, මගේ නියෝජිතයාට කෙසේ හෝ එම පරිශීලකයාට ප්‍රවේශ විය හැකිය, නැතහොත් මම වැරදිද?

ඔබ නියෝජිතයා සමඟ ඉලක්කගත පරිශීලකයා වෙත SSH කළහොත් ඔබේ නියෝජිතයාගේ ඉල්ලීම් "සැබෑ" නියෝජිතයා සිටින ඕනෑම තැනකට දාමය ඉහළට එනු ඇත. ඔබ මුල් පරිශීලකයාගෙන් su ත් වූ විට ඔබේ SSH නියෝජිත සොකට්ටුවට ප්‍රවේශ විය නොහැක (හෝ නොවිය යුතුය) - එය ජීවත්වන නාමාවලිය 700 මාදිලිය වන අතර එය මුල් පරිශීලකයා සතු වේ. (පැහැදිලි ගම්පලෙග්: නම් ඔබ root වෙත ඉන්නේ දත්ත මාරුව සහ ඒක වැඩ වෙන්න පුළුවන් SSH_AUTH_SOCK පරිසරය නැවත සකස්, නමුත් මම ඒ ගැන විශ්වාසය තැබිය නොහැකි බව)
voretaq7

1
මගේ සේවාදායකයේ (උබුන්ටු 12.04, ssh අනුවාදය OpenSSH_5.9p1 Debian-5ubuntu1.1, OpenSSL 1.0.1 14 මාර්තු 2012), ssh සතුව -aසහ -Aතර්ක තිබේ. -aඅදහස් කරන දෙයට හරියටම ප්‍රතිවිරුද්ධද, එය නියෝජිතයා ඉදිරියට යැවීම අක්‍රීය කරයි! එබැවින්, උබුන්ටු හි මෑත (සහ සමහර විට) අනුවාදය යටතේ, -Aනියෝජිත ඉදිරියට යැවීම සක්‍රීය කිරීමට භාවිතා කරන්න.
knite

nknite ඔබ නිවැරදියි - එය මගේ පිළිතුරේ (අවුරුදු 3 ක් පැරණි) යතුරු ලියනයකි. දැන්
ස්ථාවරයි
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.