আমি কীভাবে এসএসএফএসে সুডো করব?


35

আমার স্থানীয় হোস্টে alphaআমার কাছে একটি ডিরেক্টরি রয়েছে fooযা নীচে হোস্ট করার জন্য sshfs এর মাধ্যমে ম্যাপ করা আছে bravo:

$ sshfs charlie@bravo:/home/charlie ~/foo

যাইহোক, হোস্টে bravoআরও একটি ব্যবহারকারী রয়েছে, ডেল্টা, আমি এটি করতে চাই sudo /bin/su, যাতে আমি কাজ করতে পারি bravo:/home/deltadeltassh এর মাধ্যমে লগ ইন নাও হতে পারে; যে কারণে আমি পরিবর্তন করতে পারি না, আপনি কেবলমাত্র মেশিনে থাকলেই আপনি ডেল্টায় চলে যেতে পারেন।

সাধারণত আমি এসএসএসে প্রবেশ করতাম bravo, তারপরে ডেল্টা থেকে সুডো করতাম, তবে আমি ভাবছিলাম যে আমি যখন এসএসএসের মাধ্যমে চার্লির বাড়ির দিরটি পেয়েছি তখন আমি কিছু করতে পারি কি না?


2
এটি ফাইলের অনুমতি সহ সবচেয়ে ভাল সমাধান করা যেতে পারে।
artifex

উত্তর:


36

আপনি যে সার্ভারে সংযোগ করছেন তার ওএসের উপর নির্ভর করে এটি পৃথক হবে। CentOS 5 এর জন্য আপনি sshfs মাউন্ট বিকল্পগুলি যুক্ত করতে পারেন:

-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"

উবুন্টু 9.10 এর জন্য (আমার ধারণা, 9.04 হতে পারে তবে এটি সম্ভবত উভয়ের ক্ষেত্রে সমান) বা দেবিয়ান আপনি যুক্ত করবেন:

-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server"

ওপেনএসএসএইচ চলমান অন্যান্য সিস্টেমে সঠিক পথ খুঁজে বের করতে

sudo grep Subsystem /etc/ssh/sshd_config

এবং এসএফটিপি-সার্ভার বাইনারিটির অবস্থান সন্ধান করুন।

আপনাকে NOPASS: s sftp- সার্ভারের পথ with বা প্রিডুয়্যাটেটের সাথে আপডেটের জন্য টাইমস্ট্যাম্প রয়েছে ssh user@host sudo -vএমন সূডো সেটআপ করতে হতে পারে । আমার ক্ষেত্রে, আমার দুটি কমান্ড ছিল:sudonotty

ssh login_user@host sudo -v
sshfs login_user@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u as_user /usr/lib/ssh/sftp-server"

1
ধন্যবাদ, এটি একটি খুব ঝরঝরে 'কৌশল'। আমি আমার পরিস্থিতির জন্য সুডোতে কেবল "-u <some_other_user>" যুক্ত করেছি
jor

1
খুব ভাল, নির্বিঘ্নে কাজ করেছেন। আমার একমাত্র বক্তব্য হ'ল উদাহরণে দু'বার / usr / bin / sudo রয়েছে, যা অপ্রয়োজনীয় বলে মনে হয়।
xaralis

1
@ ক্রাইসিস পুরানো পোস্ট আনার জন্য দুঃখিত, তবে আমি একটি মৌলিক ব্যবহারকারীর সাহায্যে CentOS 6.5 সার্ভারে প্রবেশ করতে চাই, তবে কেবলমাত্র অ্যাক্সেসের ফোল্ডারে মাউন্ট করতে চাই। এই সঠিক হবে: sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server"?
ডন রোমি

1
ssh host sudo -vআমার সুডোকে খুশি করে না - এটি আমাকে সুডো করার আগে এটি একটি টিটি চায়। থটস?
w00t

1
@ ইগগো @ সেবি @ ক্যালান্ডোয়া @ এক্সালালিস যদি আমি ডিবিয়ান 9-এ মূল হিসাবে সুডো করতে চান তবে এই কমান্ডটি কি কাজ করবে? কারণ যদি আমি ব্যবহার করি: ssh -t myuser@host sudo -v sshfs myuser@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u root /usr/lib/openssh/sftp-server"এটি কাজ করে না: \ - এটি কেবল "রিমোট হোস্টগুলি সংযোগ বিচ্ছিন্ন করেছে"
ব্যবহারকারী 3450548

3

আপনি অন্যান্য ব্যবহারকারী ফাইলগুলি (এমনকি মূল) অ্যাক্সেস করতে bindfs + sshfs ব্যবহার করতে পারেন।

প্রথমে আপনি আপনার 'রুট' বা অন্য কোনও ডিরেক্টরিটিকে আপনার ব্যবহারকারীর অধীনে রিমপড ইউআইডি সহ মাউন্ট করবেন।

ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"

এবং তারপর কেবল ডিরেক্টরিতে sshfs।

sshfs USER@SERVER:tmproot TARGET

তবে সুরক্ষার জন্য পুরো রুটটি মানচিত্র না করা আপনার /কেবলমাত্র সেই অংশটিই ম্যাপ করা ভাল । উদাহরণস্বরূপ: আপনি এই পদ্ধতিটি অন্য কোনও ব্যবহারকারীর ডিরেক্টরিতে আপনার মাউন্ট করার জন্য ব্যবহার করতে পারেন, উদাহরণস্বরূপ / var / www থেকে ~ / www এ ফাইলগুলি এবং আপনার ব্যবহারকারীর মধ্যে রিম্যাপ যাতে আপনার এতে প্রবেশের সম্পূর্ণ অ্যাক্সেস থাকে।

আপনার যদি ইউআইডি সংরক্ষণের অ্যাক্সেসের প্রয়োজন হয় বা একাধিক ব্যবহারকারীর অ্যাক্সেসের প্রয়োজন হয় তবে আমি উদাহরণস্বরূপ uid = 0 এবং / বিন / মিথ্যা দিয়ে একটি নতুন ব্যবহারকারী তৈরি করব এবং একটি সাধারণ এসএসএফএস করব।


0

আপনি চেষ্টা করতে পারেন (তবে আমার মনে হয় না এটি কার্যকর হবে):

sshfs -o ssh_command='ssh sudo /bin/su bravo' charlie@bravo:/home/charlie ~/foo

আমি sshfs খুব ভাল বুঝতে পারছি না, তাই আপনি কাজ করার জন্য এমন কিছু পেতে সক্ষম হতে পারেন তবে আমি কীভাবে বলতে পারলাম না, এবং আমি একটু অবাক হব।

আর একটি সম্ভাবনা হ'ল 'সুডো / বিন / সু ব্র্যাভো' কমান্ডটি ~ / .ssh / rc তে রাখা, তবে এটি আপনার সমস্ত fs মাউন্টিংকে প্রভাবিত করবে (এটি ধরে নিলে আমিও সন্দেহ করি) পাশাপাশি আপনার ssh এর সাধারণ ব্যবহার ।

ডেবি ডাউনার হওয়ার জন্য দুঃখিত


0

ছাড়ের দ্বারা, আমি মনে করি এটি একটি সাধারণ কমান্ডে অর্জন করা অসম্ভব

এটি কারণ sshfs কোনও কমান্ড না দিয়েই ssh কল করে তবে পরিবর্তে, এসএফটিপি ব্যবহার করে যা এসএসএইচের একটি সাবসিস্টেম।

Sshfs ম্যানপেজ থেকে :

রিমোট কম্পিউটারে এসএসএইচের এসএফটিপি সাবসিস্টেম ব্যবহার করা হয়।

এছাড়াও , বর্তমান ব্যবহারকারী (বা 'সু' বা 'সুডো') পরিবর্তন করা এসএফটিপি প্রোটোকলের অংশ নয়, যদিও এটি প্রায়শই অনুরোধ করা বৈশিষ্ট্যের মতো মনে হয়।


এটি অসম্ভব নয়। ক্রিসিসের সমাধান কাজ করে।
জেইন

অবশ্যই হ্যাঁ, যেহেতু তিনি যে কমান্ডটি সাবসিস্টেমটি শুরু করে এবং সুডো যুক্ত করেছেন তার ওভাররাইড করে। ভাল অনুসন্ধান কিন্তু আপনাকে পাসওয়ার্ড ছাড়াই sudo সেট আপ করতে হবে (বা টাইমস্ট্যাম্প ব্যবহার করতে হবে), যা সুরক্ষা হ্রাস করতে পারে। তবে আমি তর্ক করব না যেহেতু ওপি সত্যই এটি করতে চেয়েছিল।
ওয়েবয়েড

0

সম্ভবত, সর্বোত্তম উপায় হ'ল ফাইল অনুমতিগুলির মাধ্যমে, যেমন @ আরটিফেক্স প্রস্তাব করে।

@ ওয়েবোয়েড যেমন বলেছে, এসএসএফএস এর মাধ্যমে এটি অসম্ভব।

তবে আমি অনুমান করি আপনি একটি সহজ স্ক্রিপ্ট তৈরি করতে পারেন, আসুন এটি কল করুন sudosshযা আপনার গ্রহণ করবে $PWD, এটি রূপান্তর করবে /home/delta/এবং কমান্ডটি রিমোট মেশিনের মাধ্যমে sshএবং চালাবে sudo

এটার মতো কিছু:

#!/usr/bin/env bash

ssh -t charlie@bravo "cd `pwd | sed 's/user\/foo/delta/'`; sudo -u delta $*"

এর পরে আপনি কার্যকর করতে পারেন sudossh commandএবং আপেক্ষিক পাথগুলি ব্যবহার করতে ভুলবেন না ।

আপনি যদি ssh-এজেন্ট ব্যবহার করেন তবে আপনাকে কেবল আপনার sudoপাসওয়ার্ড লিখতে হবে ।


0

আমার সমাধান cringfully কুরুচিপূর্ণ (স্ট্রিং পলায়নের কয়েকটি স্তর ধন্যবাদ), কিন্তু এটি থেকে sftp-serverযাওয়ার পথটি পড়বে /etc/ssh/sshd_configএবং এর মাধ্যমে এটি সম্পাদন করবে sudo। এখন যদি এর sshd_configঅধীনে না থাকে /etc/ssh? sshসঙ্গে বাইনারি ভিতরে stringsএবং অনুসন্ধান করতে পারেন grep?

#!/bin/sh
sshfs -o sftp_server="/bin/sh -c \"sudo \`sed -n '/Subsystem\\\\\\\\s\\\\+sftp\\\\\\\\s\\\\+/{s///;p}' /etc/ssh/sshd_config\`\"" "$@"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.