বাশ স্ক্রিপ্ট ত্রুটি stty: স্ট্যান্ডার্ড ইনপুট: ডিভাইসের জন্য অনুপযুক্ত ioctl


16

ইনস্টলেশন ও সেটআপ স্বয়ংক্রিয় করতে আমি এখানে ব্যাশ স্ক্রিপ্টে নথিগুলি ব্যবহার করছি যেখানে অনেকবার পাসওয়ার্ডের প্রয়োজন হয়। আমি একবার পাসওয়ার্ডটি প্রবেশ করি এবং স্ক্রিপ্টটি বিভিন্ন কমান্ডে এটি দেয়। বেশিরভাগ ক্ষেত্রে এখানে-দস্তাবেজ পদ্ধতির এই জরিমানাটি পরিচালনা করে। তবে, একটি ক্ষেত্রে আমি এই ত্রুটিটি পেয়েছি:

Enter VNC password: stty: standard input: Inappropriate ioctl for device
Verify password:    
stty: standard input: Inappropriate ioctl for device

দয়া করে লক্ষ্য করুন যে এই ত্রুটি বার্তাটি এসেছে x11vnc -storepassword(থেকে নয় sudo) is

আমার সমস্যা সম্পর্কিত x11vnc -storepasswdএবং এখানে আমার কোড সম্পর্কিত:

sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC

স্পষ্টতই (ত্রুটি থেকে) কাজ করে না। sudo x11vnc -storepasswd ~/.vnc/passwdস্ক্রিপ্টে কীভাবে প্রয়োগ করা যায় তার একটি কাজের উদাহরণ আমি প্রশংসা করব ।

যদি এটি সহায়তা করে তবে প্রম্পটগুলি এর মতো দেখায়:

ভিএনসি
পাসওয়ার্ড প্রবেশ করান: পাসওয়ার্ড যাচাই করুন:
/home/user/.vnc/passwd তে পাসওয়ার্ড লিখুন? [Y] / NN

ব্যবহার expectকরা কি আরও ভাল সমাধান হতে পারে? যদি তা হয় তবে আমি এই ক্ষেত্রে এটি কীভাবে ব্যবহার করব? (আমি এর expectআগে কখনও ব্যবহার করি নি তবে এই প্রশ্নটি পোস্ট করার পরে আমি প্রচুর উদাহরণ দেখেছি এবং আমি expectনিজে থেকে কাজ করতে পারি না ))

উত্তর:


3

x11vncএটির স্ট্যান্ডার্ড ইনপুটটি টার্মিনাল হিসাবে প্রত্যাশা করে এবং এটি টাইপ করার সাথে সাথে পাসওয়ার্ড প্রতিধ্বনিত করা এড়াতে এটি টার্মিনাল মোডকে পরিবর্তন করে। যখন স্ট্যান্ডার্ড ইনপুটটি টার্মিনাল নয়, sttyকলগুলি প্রতিধ্বনি বন্ধ করতে এবং ফিরতে ব্যর্থ হবে, সেইজন্য আপনি যে সতর্কতাটি দেখছেন।

প্রত্যাশা আসলেই একটি সমাধান। এই স্ক্রিপ্টটি চেষ্টা করুন (অনির্ধারিত):

#!/usr/bin/expect -f
spawn x11vnc -storepasswd ~/.vnc/passwd
expect "password:" {send "swordfish" "\r"}
expect "password:" {send "swordfish" "\r"}
expect "Write*\?" {send "y\r"}

বিকল্পভাবে, আপনি যদি পারেন তবে আরএফবি ( -passwdfileবা কোনও এসএসএল ক্লায়েন্ট শংসাপত্র) ব্যতীত কোনও প্রমাণীকরণ পদ্ধতি ব্যবহার করুন ।


ধন্যবাদ। যাইহোক, ত্রুটি নয় আসছে থেকে sudoএটা থেকে আসছে x11vnc -storepassword। আমি বিভিন্ন expectপদ্ধতির চেষ্টা করছি এবং আমি এটি সঠিকভাবে পাচ্ছি বলে মনে হচ্ছে না। এর expectজন্য একটি পাসওয়ার্ড লিখতে ব্যবহার করে একটি উদাহরণ x11vnc -storepasswordপ্রশংসিত হবে। আরও বিভ্রান্তি এড়াতে আমি আমার প্রশ্ন আপডেট করব।
মাউন্টেনএক্স-ফর-মনিকার

@ মাউন্টেনএক্স ঠিক আছে, দুঃখিত, আমি প্রশ্নটি ভুল করে লিখছি। এখানে একটি প্রত্যাশা স্ক্রিপ্ট (সম্পূর্ণরূপে অনির্ধারিত)।
গিলস 'তাই মন্দ হওয়া বন্ধ করুন'

ধন্যবাদ. আপনার অনির্ধারিত স্ক্রিপ্টটি আমাকে কয়েকটি অতিরিক্ত ক্লু দিয়েছে তবে শেষ পর্যন্ত এটি ত্রুটি ছাড়াও চালায় না। ত্রুটিটি কেবল Enter VNC password: usage: send [args] stringলাইনে রয়েছে expect "password:" {send "swordfish" "\r"}। আমি কীভাবে এটি ঠিক করব তা নিশ্চিত নই। প্রত্যাশাটি একটি খুব বাছাইয়ের সরঞ্জাম বলে মনে হচ্ছে কারণ আমি কাজকর্মের ফলাফল ছাড়াই কয়েক ঘন্টা ধরে এই বিশেষ সমস্যার সাথে বোকা বানাচ্ছি।
মনিকার জন্য মাউন্টেনএক্স

ত্রুটি (উপরের মন্তব্য) থেকে আসছে send "swordfish" "\r"এবং এটি দ্বারা সমাধান করা হয়েছিল send "swordfish\r"। তবে সমাধানটি এখনও কাজ করে না। Password / .vnc / passwd তে কোনও পাসওয়ার্ড লেখা হয় না। কেন আমি এখনও নিখুঁত। যেমনটি আমি বলেছি, আমি এখন পর্যন্ত যা ভাবতে পারি তার চেষ্টা করেও এই ফলাফলটি দেখছি।
মাউন্টেনএক্স-ফর-মনিকার

বিটিডাব্লু, expectম্যানুয়ালি প্রবেশ করার সময় একই সমাধানগুলি আপনার সমাধানের কাজে ব্যবহৃত হয় used expectআমি এই মুহুর্তে চেষ্টা করেছি এটির এই স্ক্রিপ্ট বা এর কোনও প্রকারে তারা কাজ করে না।
মাউন্টেনএক্স-ফর-মনিকার

5

এই সতর্কতা বার্তাগুলি এড়ানোর জন্য আরেকটি বিকল্প হ'ল x11vncইউএনআইএক্স কমান্ড দ্বারা তৈরি সিউডো-টার্মিনালে চালিত করা (ইন্টারেক্টিভ প্রোগ্রামগুলি নিয়ন্ত্রণ করার জন্য সিউডো-টার্মিনাল (pty) ব্যবহার করে দেখুন )। scriptকমান্ড বা সরঞ্জামগুলির সাহায্যে এটি করা যেতে পারে pdip("ইন্টারেক্টিভ প্রোগ্রামগুলির সাথে প্রোগ্রামযুক্ত ডায়ালগ")।

সিউডো-টার্মিনাল সরবরাহ করার জন্য ম্যাক ওএস এক্স 10.6.8 এ সতর্কতা বার্তা x11vnc:

# x11vnc 0.9.14
sudo x11vnc -storepasswd ~/.vnc/passwd << ENDDOC
password
password
y
ENDDOC

# Enter VNC password: stty: stdin isn't a terminal
#
# Verify password:    
# stty: stdin isn't a terminal
# Write password to ~/.vnc/passwd?  [y]/n Password written to: ~/.vnc/passwd

scriptকমান্ডটি ব্যবহার করে সমাধানগুলি :

# GNU script command
sudo script -q -c 'x11vnc -storepasswd ~/.vnc/passwd' <<ENDDOC /dev/null
password
password
y
ENDDOC

# ... or ...
printf '%s\n' 'password' 'password' 'y' | 
   sudo script -q -c 'x11vnc -storepasswd ~/.vnc/passwd' /dev/null


# FreeBSD script command
sudo script -q /dev/null x11vnc -storepasswd ~/.vnc/passwd <<ENDDOC
password
password
y
ENDDOC

1

-Sসুডোর একটি বিকল্প রয়েছে যা এটি STDIN থেকে পাসডাব্লুটি পড়তে দেয়।

[user@evil ~]$ tail -1 /etc/shadow
tail: cannot open `/etc/shadow' for reading: Permission denied
[user@evil ~]$ echo 'P@ssW3rd!' | sudo -S tail -1 /etc/shadow
nfsnobody:!!:15891::::::

প্রক্রিয়াটি প্রদর্শনের জন্য এখানে একটি উদাহরণ স্ক্রিপ্ট রয়েছে:

#!/bin/bash

function hr {
    perl -e 'print "-" x 80, "\n";'
}

hr
read -p "Please enter your sudo password: " -s sudopasswd
echo

hr
echo "-sudo run: tail -1 /etc/shadow"
tail -1 /etc/shadow

hr
echo "+sudo run: tail -1 /etc/shadow"
echo "$sudopasswd" | sudo -S tail -1 /etc/shadow

hr
echo "-sudo run: ls -la /root/"
ls -la /root/

hr
echo "+sudo run: ls -la /root/"
echo "$sudopasswd" | sudo -S ls -la /root/

hr

আপনার স্ক্রিপ্ট, কেবল কিছু করার দরকার হবে:

read -p "Please enter your sudo password: " -s sudopasswd
echo "$sudopasswd" | sudo -S x11vnc -storepasswd ~/.vnc/passwd 

এটি আপনাকে পাসওয়ার্ডের হার্ডকোড ছাড়াই আপনার স্ক্রিপ্টে sudo কমান্ডগুলি ব্যবহার করার অনুমতি দেয়।

বিকল্পভাবে, আপনি নিজের ব্যবহারকারী বা ব্যবহারকারীদের একটি উপসেট, একটি পাসওয়ার্ড ছাড়াই sudo দিয়ে x11vnc চালনার ক্ষমতা যুক্ত করতে পারেন তবে এর মতো একটি লাইন যুক্ত করতে পারেন /etc/sudoers:

user    ALL=(root) NOPASSWD: /path/to/x11vnc

বা একটি vncusersগোষ্ঠী তৈরি করুন, সেই দলে ব্যবহারকারী যুক্ত করুন এবং এতে নিম্নলিখিতগুলি যুক্ত করুন /etc/sudoers:

%vncusers    ALL=(root) NOPASSWD: /path/to/x11vnc

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