2020-06-27
Do stacji z RedHat-em łączę się z poziomu stacji Windows wykorzystując Putty i SSH. Wszystko działa, ale po wprowadzeniu nazwy użytkownika i naciśnięciu enter, muszę poczekać, chyba co najmniej około minuty, aż pojawi się pytanie o hasło. What is going on?
SSH z wersji na wersję zabezpiecza się przed potencjalnymi próbami hakowania połączeń i niektóre z opcji w tak prostym środowisku jak moje, nie mogły zostać spełnione. Serwer SSH czekał na wykonanie dodatkowych testów, ale niestety dochodziło do timeout-ów i dopiero kiedy wszystkie możliwości zostały wyczerpane przechodził do etapu pytania o hasło.
Co można wyłączyć:
/etc/ssh/sshd.conf
zmień opcję UseDNS na no. U mnie wystarczyło odkomentować linijkę:
UseDNS no
zmień opcję GSSAPIAuthentication na no. U mnie ta opcja była ustawiona na yes, więc musiałem ja zmienić:
GSSAPIAuthentication no
Po wszystkim zrestartuj demona sshd:
systemctl restart sshd.service
U mnie pomogło. A u Ciebie?
2020-06-20
Remoting służy do uruchamiania poleceń na zdalnym komputerze. Zdarza się jednak, że chcesz przetestować połączenie na lokalnym komputerze, czyli przez remoting połączyć się ze swojego komputera na swój komputer. Jak to zrobić?
Twój lokalny komputer ma kilka nazw, które można wykorzystać łącząc się do niego:
- localhost
- 127.0.0.1
- $env:COMPUTERNAME
Niestety polecenie w takiej postaci:
Invoke-Command -ComputerName localhost { echo 1 }
Kończy się błędem:
[localhost] Connecting to remote server localhost failed with the following error message : Access is denied. For more information, see the about_Remote_Troubleshooting
Help topic.
+ CategoryInfo : OpenError: (localhost:String) [], PSRemotingTransportException
+ FullyQualifiedErrorId : AccessDenied,PSSessionStateBroken
Dlaczego? Jestem administratorem i nie mam uprawnień? Przecież domyślnie, jeśli nie przekazuję innych credentials, to połączenie jest wykonywane w bieżącym kontekście bezpieczeństwa. Najprawdopodobniej wiąże się to z tym, że połączenie może wykonywać tylko administrator, a przy połączeniu do serwera zdalnego twoje konto traci token administratora. Da się to jednak prosto obejść! Wystarczy do polecenia dodać parametr credential i wskazać, że połączenie zdalne ma być wykonywane w jego kontekście bezpieczeństwa, o tak:
Invoke-Command -ComputerName localhost { echo 1 } -Credential (Get-Credential)
Takie świeżo pobrane poświadczenia pozwolą pomyślnie wykonać połączenie, które domyślnie jest dostępne tylko dla administratorów
2020-06-20
Do włączenia remotingu na komputerze lokalnym poinciana wystarczyć następująca komenda uruchamiana „jako administrator”
Enable-PSRemoting
Jeśli jednak wśród interfejsów sieciowych znajduje się chociaż jeden oznaczony jako publiczny, to ta komenda może nie włączyć remotingu.
WinRM firewall exception will not work since one of the network connection types on this machine is set to public. Change the network connection type to either Domain or Private and try again
Pomocna jest wtedy opcja -SkipNetworkProfileCheck, która pomija sprawdzanie profili sieciowych. Można tu jeszcze dodawać parametr -force, dzięki czemu nie jesteśmy pytani o żadne dodatkowe potwierdzenia:
Enable-PSRemoting -SkipNetworkProfileCheck -force
Bywa jednak, że mimo to wszystko konczy się komunikatem o błędzie:
WSManFault Message Access is Denied.
No jak to? Uruchamiam program jako administrator i mam komunikat o braku dostępu? Jeśli nie admin, to kto może włączyć remoting?
Otóż na komputerach niewłączonych do domeny, komenda wymaga aby uruchamiał ją prawdziwy administrator, a nie ktorś kto jest członkiem grupy lokalnie administratorzy – ot taka niespodzianka ze strony Microsoft. Takie działanie polecenia można jednak zmienić dodając wpis do rejestru:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
po wykonaniu tego polecenia, włączenie remotingu powinno się już udać:
Enable-PSRemoting -SkipNetworkProfileCheck -force
Jeśli zaś trzeba by było zmienić profil sieciowy z publicznego, np. na prywatny, to można wykorzystać następne komendy w potoku:
Get-NetConnectionProfile -NetworkCategory Public | Set-NetConnectionProfile -NetworkCategory Private
Pierwsza z nich pobiera połączenia publiczne, a druga zmienia ich klasyfikację na prywatne. Przed uruchomieniem upewnij się, że chociaż jeden interfejs jest publiczny, bo jeśli nie, to komenda skończy się błędem z powodu pustego potoku 🙂
2020-06-12
Objawy
Czarny pilot z żółtymi przyciskami. No cóż – bateria się rozładowała i po wymianie baterii, pilot nie chce otwierać bramy.
Leczenie
Niektóre piloty można przekopiować i ten do nich należy. Trzeba tylko wiedzieć jak. U mnie zadziałała taka metoda:
1. Na NOWYM pilocie naciśnij jednocześnie oba klawisze i trzymaj je wciśnięte. Światełko na pilocie na początku świeci stałym światłem, po około 5 sekundach zaczyna mrugać szybko, potem wolno, a potem świeci ciągłym światłem. Dojście do tego ostatniego etapu zajmuje może około 15-30 sekund, a Ty ciągle trzymasz wciśnięte oba przyciski. Nie puszczaj
2. STARY pilot kładziesz obok NOWEGO i na STARYM jeden raz krótko naciskasz przycisk. Klik i koniec, a w tym czasie cały czas trzymasz wciśnięte oba przyciski na NOWYM.
3. Coś tam pomruga i wtedy można puścić oba przyciski na NOWYM. Daj mu chwilę na dojście do siebie i przetestuj go
Instrukcja:
https://www.mobilo24.eu/wp-content/uploads/2021/12/togo_2a.pdf
(strona 8 – Quick cloning)
2020-05-31
Kiedy pracujesz z danymi często startujesz od pewnego zbioru danych, do którego dodajesz kolejne i kolejne kolumny. Koniec końców część z tych kolumn nie jest już potrzebna, a część jest nie tam, gdzie wizualnie byś chciał. Jak zrobić z tym porządek?
Bardzo prosto! Wystarczy przepisać do nowego obiektu dataframe dane pobierane z oryginalnego data frame w określonej kolejności. Przy okazji jeśli coś jest już więcej niepotrzebne, to możesz to opuścić, a jeśli kolumn jest dużo, a ty chcesz po prostu ostatnią kolumnę wstawić na początek, to wystarczy po prostu korzystać z operatora slice podczas definiowania listy kolumn do skopiowania.
Zobacz, jak to się robi w oparciu o poniższy kod:
import pandas as pd
data = [
[11,12,13,14],
[21,22,23,24],
[31,32,33,34],
[41,42,43,44]
]
df = pd.DataFrame( data = data,
columns=('one', 'two', 'three', 'four'))
df
df = df[['four','three','two','one']]
df
cols = df.columns.to_list()
df[cols[-1:] + cols[:-1]]
2020-05-31
Zazwyczaj kiedy pracujemy z data frame i mamy dane powstające wskutek grupowania wpadamy na pomysł założenia multiindeksu dla wierszy. Jednak czasami specyfika danych jest taka, że nawet struktura w kolumnach ma postać pogrupowaną, więc zgodną ze strukturą multiindeksu. Jak więc zbudować multiindeks zarówno na wierszach, jak i na kolumnach? Oto prosty przykład, który ilustruje ten proces:
Więcej na ten temat: https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html
import pandas as pd
colindex = pd.MultiIndex.from_tuples(
(('Green','L'),('Green','XL'),('Blue','L'),('Blue','XL')),
names=('Color','Size')
)
rowindex = pd.MultiIndex.from_tuples(
(('T-Shirt','Class 1'),('T-Shirt','Class 2'),
('Jeans','Class 1'),('Jeans','Class 2')),
names=('Type', 'Quality')
)
data = [
[11,12,13,14],
[21,22,23,24],
[31,32,33,34],
[41,42,43,44]
]
df = pd.DataFrame(data = data,
index = rowindex,
columns = colindex)
df
2020-05-31
W idealnym świecie idealnie jest wyświetlać każdą liczbę z maksymalną dokładnością, ale… świat nie jest idealny. Bywa, że wyliczoną wartość 1.0000001 wolelibyśmy wyświetlić po prostu jako 1. Jedną z możliwością byłoby wykonanie odpowiednich obliczeń na DataFrame i pozbycie się problemu właściwie raz na zawsze. Jeśli jednak wolisz po prostu zmienić parametry tak, aby dane wyświetlały się z mniejszą liczbą cyfr po przecinku wystarczy zmienić parametr
pd.options.display.float_format
W tej zmiennej określasz styl formatowania, który będzie wykorzystywany podczas wyświetlania liczb zmienno-przecinkowych. Jedna instrukcja i po sprawie!
import pandas as pd
pd.options.display.float_format = "{:,.10f}".format
x = [ [0.123456789, 0.987654321],
[0.123456789, 0.987654321]]
pd.DataFrame(x)