প্রক্রিয়া বিকল্প কেন <() ssh -F এর সাথে কাজ করে না


11

আমার কাছে কিছু ভ্যাংগার ভার্চুয়াল মেশিন রয়েছে। তাদের লগ ইন করতে আমি vagrant sshআদেশটি জারি করি । আমি নিয়মিত sshকমান্ড ব্যবহার করে তাদের লগ ইন করতে চাই । vagrant ssh-configউপযুক্ত কনফিগ ফাইল আউটপুট

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2201
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/cbliard/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

এই কনফিগারেশনটি কোনও ফাইলে আউটপুট দেওয়ার সাথে এবং এর সাথে ব্যবহার করার সময় ssh -F, সবকিছু ঠিকঠাকভাবে কাজ করে:

$ vagrant ssh-config > /tmp/config
$ ssh -F /tmp/config default
=> logged successfully

<(cmd)অস্থায়ী কনফিগারেশন ফাইলটি তৈরি করা রোধ করতে প্রক্রিয়া প্রতিস্থাপন অপারেটর ব্যবহার করার সময় , এটি ব্যর্থ হয়:

$ ssh -F <(vagrant ssh-config) default
Can't open user config file /proc/self/fd/11: No such file or directory

ব্যবহার করার সময় একই ত্রুটি ঘটে <(cat /tmp/config)

$ ssh -F <(cat /tmp/config) default
Can't open user config file /proc/self/fd/11: No such file or directory

আমি zsh ব্যবহার করছি এবং আমি ব্যাশের সাথে একই আচরণ পর্যবেক্ষণ করছি। আমি এখানে কি ভুল করছি?


2
দেখে মনে হচ্ছে যে এসএসএস সমস্ত অপ্রত্যাশিত ফাইল বর্ণনাকারী বন্ধ করে দিচ্ছে।
ctrl-alt-delor

উত্তর:


10

আদেশ:

ssh -F <(vagrant ssh-config) default

vagrantপাইপের সাথে যুক্ত স্টাডআউট দিয়ে একটি পৃথক প্রক্রিয়াতে কমান্ডটি চালায় । পাইপের অন্য প্রান্তটি ফাইল বর্ণনাকারী হিসাবে সংযুক্ত করা হয়েছে n(আপনার ক্ষেত্রে এটি 11 টি) একটি নতুন প্রক্রিয়াতে চালিত হয় sshযা শেলটি চালায়:

ssh -F /proc/self/fd/n default

এখন, এটি কেবল তখনই কাজ করে যদি sshপ্রারম্ভকালে এর ফাইল বর্ণনাকারী বন্ধ না করে।

দুর্ভাগ্যক্রমে, এটা করে।

যদি ব্যবহার করা হয় তবে zshএকটি বিকল্প হ'ল =(...)প্রক্রিয়া প্রতিস্থাপনের ফর্মটি ব্যবহার করা হয় যেখানে পাইপ ব্যবহার করার পরিবর্তে এবং /proc/self/fdএটি একটি টেম্প ফাইল ব্যবহার করে।

অথবা আপনি কোনও ফাইল বর্ণনাকারী ব্যবহার করতে পারেন যা sshবন্ধ হয় না। উদাহরণস্বরূপ, আপনি যদি কিছু খাওয়াতেন না ssh(যদি রিমোট কমান্ড স্ট্ডিনের কাছ থেকে কিছু না পড়ছে) আপনি fd0 ব্যবহার করতে পারেন , যেমন:

vagrant ssh-config | ssh -F /dev/stdin -n default

1
ওয়ান্ডারফুল। সঙ্গে =(...)এটা একটি যাদুমন্ত্র মত কাজ করে এবং অস্থায়ী ফাইল স্বয়ংক্রিয়ভাবে সরানো হয় যখন sshঅধিবেশন শেষ। সহ রূপটি /dev/stdinসফলভাবে সংযোগ করে তবে অবিলম্বে প্রস্থান করে।
cbliard

1
@ কেব্লায়ার্ড, হ্যাঁ, আপনি অন্য প্রান্তে যে কমান্ডটি চালাচ্ছেন এটি যদি একটি ইন্টারেক্টিভ শেল হয়, তবে এটি তার স্টিডিন থেকে পড়বে (যা এখন ভিজাগরের কাছে ব্যবহৃত পাইপ) ইওফটি এবং প্রস্থানটি দেখুন। এই কারণেই আমি বলছিলাম আপনি যদি কিছু খাওয়ান নাssh
স্টাফেন চেজেলাস

ঠিক আছে, আপনি যদি কিছু খাওয়াতেন না তবে আপনি কীssh বোঝাতে চেয়েছিলেন তা আমি বুঝতে পারি নি । এটা এখন পরিষ্কার।
cbliard

এটা কি এখনও সত্য? আমি সফলভাবে ব্যবহার করছি: ssh -F <(cat ~/.ssh/config ~/.ssh/hosts)এসএসএইচ চলাকালীন 2 টি কনফিগারেশন ফাইলগুলিতে যোগ দিতে। আর ZSH উপর, আমি এই কাজ করতে পারেন: ssh -F <(vagrant ssh-config) default
সিএমসিডিগ্রাগনকাই

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.